X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Frecord.h;h=cf14ab81909b635458c7461aa34a95257626f13a;hb=4cad40b4beba29b87204024e96839131d596a00e;hp=f0c3684d0c0a76b8b392486649bc7e0c0b72eb03;hpb=ba78bdd4a81e128a47324033d4cb074d5ab8d86a;p=bacula%2Fbacula diff --git a/bacula/src/stored/record.h b/bacula/src/stored/record.h index f0c3684d0c..cf14ab8190 100644 --- a/bacula/src/stored/record.h +++ b/bacula/src/stored/record.h @@ -2,43 +2,55 @@ * Record, and label definitions for Bacula * media data format. * + * Kern Sibbald, MM + * * Version $Id$ * */ /* - Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - 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. + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of + 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. - 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 should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - */ + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ #ifndef __RECORD_H #define __RECORD_H 1 /* Return codes from read_device_volume_label() */ -#define VOL_NOT_READ 0 /* Volume label not read */ -#define VOL_OK 1 /* volume name OK */ -#define VOL_NO_LABEL 2 /* volume not labeled */ -#define VOL_IO_ERROR 3 /* volume I/O error */ -#define VOL_NAME_ERROR 4 /* Volume name mismatch */ -#define VOL_CREATE_ERROR 5 /* Error creating label */ -#define VOL_VERSION_ERROR 6 /* Bacula version error */ -#define VOL_LABEL_ERROR 7 /* Bad label type */ -#define VOL_NO_MEDIA 8 /* Hard error -- no media present */ +enum { + VOL_NOT_READ = 1, /* Volume label not read */ + VOL_OK, /* volume name OK */ + VOL_NO_LABEL, /* volume not labeled */ + VOL_IO_ERROR, /* volume I/O error */ + VOL_NAME_ERROR, /* Volume name mismatch */ + VOL_CREATE_ERROR, /* Error creating label */ + VOL_VERSION_ERROR, /* Bacula version error */ + VOL_LABEL_ERROR, /* Bad label type */ + VOL_NO_MEDIA /* Hard error -- no media present */ +}; /* See block.h for RECHDR_LENGTH */ @@ -61,12 +73,12 @@ */ /* Record state bit definitions */ -#define REC_NO_HEADER (1<<0) /* No header read */ +#define REC_NO_HEADER (1<<0) /* No header read */ #define REC_PARTIAL_RECORD (1<<1) /* returning partial record */ #define REC_BLOCK_EMPTY (1<<2) /* not enough data in block */ -#define REC_NO_MATCH (1<<3) /* No match on continuation data */ +#define REC_NO_MATCH (1<<3) /* No match on continuation data */ #define REC_CONTINUATION (1<<4) /* Continuation record found */ -#define REC_ISTAPE (1<<5) /* Set if device is tape */ +#define REC_ISTAPE (1<<5) /* Set if device is tape */ #define is_partial_record(r) ((r)->state & REC_PARTIAL_RECORD) #define is_block_empty(r) ((r)->state & REC_BLOCK_EMPTY) @@ -74,26 +86,29 @@ /* * DEV_RECORD for reading and writing records. * It consists of a Record Header, and the Record Data - * + * * This is the memory structure for the record header. */ +struct BSR; /* satisfy forward reference */ struct DEV_RECORD { - int sync; /* synchronous */ - /* File and Block are always returned on reading records, but - * only returned on writing if sync is set (obviously). + dlink link; /* link for chaining in read_record.c */ + /* File and Block are always returned during reading + * and writing records. */ - uint32_t File; /* File number */ - uint32_t Block; /* Block number */ - uint32_t VolSessionId; /* sequential id within this session */ - uint32_t VolSessionTime; /* session start time */ - int32_t FileIndex; /* sequential file number */ - int32_t Stream; /* stream number */ - uint32_t data_len; /* current record length */ - uint32_t remainder; /* remaining bytes to read/write */ - uint32_t state; /* state bits */ + uint32_t File; /* File number */ + uint32_t Block; /* Block number */ + uint32_t VolSessionId; /* sequential id within this session */ + uint32_t VolSessionTime; /* session start time */ + int32_t FileIndex; /* sequential file number */ + int32_t Stream; /* stream number */ + uint32_t data_len; /* current record length */ + uint32_t remainder; /* remaining bytes to read/write */ + uint32_t state; /* state bits */ + BSR *bsr; /* pointer to bsr that matched */ uint8_t ser_buf[WRITE_RECHDR_LENGTH]; /* serialized record header goes here */ - POOLMEM *data; /* Record data. This MUST be a memory pool item */ -}; + POOLMEM *data; /* Record data. This MUST be a memory pool item */ + int32_t match_stat; /* bsr match status */ +}; /* @@ -101,58 +116,58 @@ struct DEV_RECORD { * Note, these values are negative to distinguish them * from user records where the FileIndex is forced positive. */ -#define PRE_LABEL -1 /* Vol label on unwritten tape */ -#define VOL_LABEL -2 /* Volume label first file */ -#define EOM_LABEL -3 /* Writen at end of tape */ -#define SOS_LABEL -4 /* Start of Session */ -#define EOS_LABEL -5 /* End of Session */ -#define EOT_LABEL -6 /* End of physical tape (2 eofs) */ - -/* +#define PRE_LABEL -1 /* Vol label on unwritten tape */ +#define VOL_LABEL -2 /* Volume label first file */ +#define EOM_LABEL -3 /* Writen at end of tape */ +#define SOS_LABEL -4 /* Start of Session */ +#define EOS_LABEL -5 /* End of Session */ +#define EOT_LABEL -6 /* End of physical tape (2 eofs) */ + +/* * Volume Label Record. This is the in-memory definition. The * tape definition is defined in the serialization code itself * ser_volume_label() and unser_volume_label() and is slightly different. */ - + struct Volume_Label { - /* + /* * The first items in this structure are saved * in the DEVICE buffer, but are not actually written * to the tape. */ - int32_t LabelType; /* This is written in header only */ - uint32_t LabelSize; /* length of serialized label */ + int32_t LabelType; /* This is written in header only */ + uint32_t LabelSize; /* length of serialized label */ /* - * The items below this line are stored on + * The items below this line are stored on * the tape */ - char Id[32]; /* Bacula Immortal ... */ + char Id[32]; /* Bacula Immortal ... */ - uint32_t VerNum; /* Label version number */ + uint32_t VerNum; /* Label version number */ /* VerNum <= 10 */ - float64_t label_date; /* Date tape labeled */ - float64_t label_time; /* Time tape labeled */ + float64_t label_date; /* Date tape labeled */ + float64_t label_time; /* Time tape labeled */ /* VerNum >= 11 */ - btime_t label_btime; /* tdate tape labeled */ - btime_t write_btime; /* tdate tape written */ + btime_t label_btime; /* tdate tape labeled */ + btime_t write_btime; /* tdate tape written */ /* Unused with VerNum >= 11 */ - float64_t write_date; /* Date this label written */ - float64_t write_time; /* Time this label written */ + float64_t write_date; /* Date this label written */ + float64_t write_time; /* Time this label written */ - char VolName[MAX_NAME_LENGTH]; /* Volume name */ - char PrevVolName[MAX_NAME_LENGTH]; /* Previous Volume Name */ + char VolumeName[MAX_NAME_LENGTH]; /* Volume name */ + char PrevVolumeName[MAX_NAME_LENGTH]; /* Previous Volume Name */ char PoolName[MAX_NAME_LENGTH]; /* Pool name */ char PoolType[MAX_NAME_LENGTH]; /* Pool type */ char MediaType[MAX_NAME_LENGTH]; /* Type of this media */ char HostName[MAX_NAME_LENGTH]; /* Host name of writing computer */ - char LabelProg[50]; /* Label program name */ - char ProgVersion[50]; /* Program version */ - char ProgDate[50]; /* Program build date/time */ + char LabelProg[50]; /* Label program name */ + char ProgVersion[50]; /* Program version */ + char ProgDate[50]; /* Program build date/time */ }; #define SER_LENGTH_Volume_Label 1024 /* max serialised length of volume label */ @@ -165,27 +180,27 @@ typedef struct Volume_Label VOLUME_LABEL; * This record is at the beginning and end of each session */ struct Session_Label { - char Id[32]; /* Bacula Immortal ... */ + char Id[32]; /* Bacula Immortal ... */ - uint32_t VerNum; /* Label version number */ + uint32_t VerNum; /* Label version number */ - uint32_t JobId; /* Job id */ - uint32_t VolumeIndex; /* Sequence no of volume for this job */ + uint32_t JobId; /* Job id */ + uint32_t VolumeIndex; /* Sequence no of volume for this job */ /* VerNum >= 11 */ - btime_t write_btime; /* Tdate this label written */ + btime_t write_btime; /* Tdate this label written */ /* VerNum < 11 */ - float64_t write_date; /* Date this label written */ + float64_t write_date; /* Date this label written */ /* Unused VerNum >= 11 */ - float64_t write_time; /* Time this label written */ + float64_t write_time; /* Time this label written */ char PoolName[MAX_NAME_LENGTH]; /* Pool name */ char PoolType[MAX_NAME_LENGTH]; /* Pool type */ char JobName[MAX_NAME_LENGTH]; /* base Job name */ char ClientName[MAX_NAME_LENGTH]; - char Job[MAX_NAME_LENGTH]; /* Unique name of this Job */ + char Job[MAX_NAME_LENGTH]; /* Unique name of this Job */ char FileSetName[MAX_NAME_LENGTH]; char FileSetMD5[MAX_NAME_LENGTH]; uint32_t JobType; @@ -198,11 +213,11 @@ struct Session_Label { uint32_t StartFile; uint32_t EndFile; uint32_t JobErrors; - uint32_t JobStatus; /* Job status */ + uint32_t JobStatus; /* Job status */ }; typedef struct Session_Label SESSION_LABEL; -#define SERIAL_BUFSIZE 1024 /* volume serialisation buffer size */ +#define SERIAL_BUFSIZE 1024 /* volume serialisation buffer size */ #endif