|
|
1.1 root 1: /**
2: Copyright(c) Maynard Electronics, Inc. 1984-92
3:
4:
5: Name: mtf.h
6:
7: Description: Microsoft Tape Format v1.0 tape structure definitions
8: and attribute bit definitions.
9:
10:
11: $Log: T:/LOGFILES/MTF.H_V $
12:
13: Rev 1.6 20 Jun 1993 16:19:56 GREGG
14: Changed data encrypt bit def and replaced compr algor with vendor id in SSET.
15:
16: Rev 1.5 26 Apr 1993 11:45:48 GREGG
17: Seventh in a series of incremental changes to bring the translator in line
18: with the MTF spec:
19:
20: - Changed handling of EOM processing during non-OTC EOS processing.
21:
22: Matches CHANNEL.H 1.17, MAYN40RD.C 1.60, TFWRITE.C 1.63, MTF.H 1.5,
23: TFLUTILS.C 1.44, MTF10WDB.C 1.10, MTF10WT.C 1.9
24:
25: Rev 1.4 22 Apr 1993 03:31:38 GREGG
26: Third in a series of incremental changes to bring the translator in line
27: with the MTF spec:
28:
29: - Removed all references to the DBLK element 'string_storage_offset',
30: which no longer exists.
31: - Check for incompatable versions of the Tape Format and OTC and deals
32: with them the best it can, or reports tape as foreign if they're too
33: far out. Includes ignoring the OTC and not allowing append if the
34: OTC on tape is a future rev, different type, or on an alternate
35: partition.
36: - Updated OTC "location" attribute bits, and changed definition of
37: CFIL to store stream number instead of stream ID.
38:
39: Matches: TFL_ERR.H 1.9, MTF10WDB.C 1.7, TRANSLAT.C 1.39, FMTINF.H 1.11,
40: OTC40RD.C 1.24, MAYN40RD.C 1.56, MTF10WT.C 1.7, OTC40MSC.C 1.20
41: DETFMT.C 1.13, MTF.H 1.4
42:
43: Rev 1.3 19 Apr 1993 18:02:30 GREGG
44: Second in a series of incremental changes to bring the translator in line
45: with the MTF spec:
46:
47: Changes to write version 2 of OTC, and to read both versions.
48:
49: Matches: mayn40rd.c 1.55, otc40msc.c 1.19, otc40rd.c 1.23, otc40wt.c 1.23,
50: makevcb.c 1.15, fsys.h 1.32, fsys_str.h 1.46, tpos.h 1.16,
51: mayn40.h 1.32, mtf.h 1.3.
52:
53: NOTE: There are additional changes to the catalogs needed to save the OTC
54: version and put it in the tpos structure before loading the OTC
55: File/Directory Detail. These changes are NOT listed above!
56:
57: Rev 1.2 07 Dec 1992 10:20:26 GREGG
58: Changes for tf ver moved to SSET, otc ver added to SSET and links added to FDD.
59:
60: Rev 1.1 24 Nov 1992 18:18:50 GREGG
61: Updates to match MTF document.
62:
63: Rev 1.0 23 Nov 1992 14:25:14 GREGG
64: Initial revision.
65:
66: **/
67:
68: #ifndef _MTF_H_
69: #define _MTF_H_
70:
71: /**/
72: /*
73: MTF Constants
74: */
75:
76: #define FORMAT_VER_MAJOR 1
77: #define FORMAT_VER_MINOR 0
78:
79: #define TAPE_CATALOG_VER 2
80:
81: #define PW_ENCRYPT_NONE 0
82: #define DATA_ENCRYPT_NONE 0
83: #define COMPRESS_NONE 0
84: #define ECC_NONE 0
85:
86: #define MTF10_OTC 1
87:
88: #define LOCAL_TZ 127
89:
90:
91: /*
92: MTF Block Types
93: */
94:
95: #define MTF_TAPE_N "TAPE" /* Tape Header ID */
96: #define MTF_VOLB_N "VOLB" /* Volume Control Block ID */
97: #define MTF_SSET_N "SSET" /* Start of Backup Set Description Block ID */
98: #define MTF_ESET_N "ESET" /* End of Backup Set Description Block ID */
99: #define MTF_EOTM_N "EOTM" /* End of tape, continuation Block ID */
100: #define MTF_DIRB_N "DIRB" /* Directory Descriptor Block ID */
101: #define MTF_FILE_N "FILE" /* File Descriptor Block ID */
102: #define MTF_CFIL_N "CFIL" /* Corrupt File Descriptor Block ID */
103: #define MTF_ESPB_N "ESPB" /* End of Set Pad Block */
104: #define MTF_SSES_N "SSES"
105: #define MTF_ESES_N "ESES"
106:
107:
108: /*
109: DBLK Block Attributes
110:
111: The lower 16 bits are reserved for general attribute bits (those
112: which may appear in more than one type of DBLK), the upper 16 are
113: for attributes which are specific to one type of DBLK.
114:
115: Note that the block specific bit definitions overlap, and the block
116: type is used to determine the meaning of a given bit.
117: */
118:
119: /* General : */
120: #define MTF_DB_CONT_BIT 0x00000001UL
121: #define MTF_DB_COMPRESS_BIT 0x00000004UL
122: #define MTF_DB_EOS_AT_EOM_BIT 0x00000008UL
123: #define MTF_DB_VAR_BLKS_BIT 0x00000010UL
124: #define MTF_DB_SESSION_BIT 0x00000020UL
125:
126: /* THDR : */
127: #define MTF_DB_SM_EXISTS 0x00010000UL
128: #define MTF_DB_FDD_ALLOWED 0x00020000UL
129: #define MTF_DB_SM_ALT_OVERWRITE 0x00040000UL
130: #define MTF_DB_FDD_ALT_PART 0x00080000UL
131: #define MTF_DB_SM_ALT_APPEND 0x00200000UL
132:
133: /* SSET : */
134: #define MTF_DB_FDD_EXISTS 0x00010000UL
135: #define MTF_DB_ENCRYPT_BIT 0x00020000UL
136:
137: /* ESET : */
138: #define MTF_DB_FDD_ABORTED_BIT 0x00010000UL
139: #define MTF_DB_END_OF_FAMILY_BIT 0x00020000UL
140: #define MTF_DB_ABORTED_SET_BIT 0x00040000UL
141: #define MTF_DB_SET_VERIFIED_BIT 0x00080000UL
142:
143: /* EOTM : */
144: #define MTF_DB_NO_ESET_PBA 0x00010000UL
145: #define MTF_DB_INVALID_ESET_PBA 0x00020000UL
146:
147:
148: /* Turn on packing here. Need to be sure that date is packed. */
149: #pragma pack(1)
150:
151: /**/
152: /*
153: Compressed date structure for storing dates in minimal space on tape:
154:
155: BYTE 0 BYTE 1 BYTE 2 BYTE 3 BYTE 4
156: 76543210 76543210 76543210 76543210 76543210
157: yyyyyyyy yyyyyymm mmdddddh hhhhmmmm mmssssss
158: */
159: typedef struct {
160: UINT8 dt_field[5] ;
161: } MTF_DATE_TIME, * MTF_DATE_TIME_PTR ;
162:
163:
164: /**/
165: /*
166: Tape Address
167: */
168: typedef struct {
169: UINT16 data_size; /* Size of the data */
170: UINT16 data_offset; /* Offset to the data */
171: } MTF_TAPE_ADDRESS, * MTF_TAPE_ADDRESS_PTR;
172:
173:
174: /**/
175: /*
176: Stream Header
177: */
178: typedef struct {
179: UINT32 id ; /* Identifier for stream */
180: UINT16 fs_attribs ; /* FileSystem Attribute */
181: UINT16 tf_attribs ; /* TapeFormat Attributes */
182: UINT64 data_length ; /* Offset to stream */
183: UINT16 encr_algor ; /* Data encryption algorithm */
184: UINT16 comp_algor ; /* Data compression algorithm */
185: UINT16 chksum ; /* Checksum */
186: } MTF_STREAM, * MTF_STREAM_PTR ;
187:
188:
189: /**/
190: /*
191: Common DBLK Header
192: */
193: typedef struct {
194: UINT8 block_type[4] ; /* Unique identifier, see above */
195: UINT32 block_attribs ; /* Common attributes for this block */
196: UINT16 offset_to_data ; /* Offset to data associated with this
197: DBLK, or offset to next DBLK or
198: filemark if there is no associated
199: data.
200: */
201: UINT8 machine_os_id ; /* Machine/OS id where written, low byte */
202: UINT8 machine_os_version ; /* Machine/OS id where written, high byte */
203: UINT64 displayable_size ; /* Displayable data size */
204: UINT64 logical_block_address ; /* Logical blk address relative to SSET */
205: UINT64 session_id ; /* For interleaved streams */
206: UINT32 control_block_id ; /* Used for error recovery */
207:
208: UINT8 reserved[4] ; /* Was offset to string storage */
209: MTF_TAPE_ADDRESS os_specific_data ; /* Size and offset of OS specific stuff */
210: UINT8 string_type ; /* ASCII, Unicode, etc. */
211: UINT8 pad ; /* For alignment purposes */
212: UINT16 hdr_chksm ; /* Checksum of the block header. The
213: algorithm is: XOR each word preceeding
214: this one and store the result here.
215: (When the checksum is verified the
216: 'block_type' is also checked for a
217: non-zero value.
218: */
219: } MTF_DB_HDR, * MTF_DB_HDR_PTR ;
220:
221:
222: /**/
223: /*
224: Tape Header DBLK (TAPE)
225: */
226: typedef struct {
227: MTF_DB_HDR block_header;
228: UINT32 tape_id_number ;
229: UINT32 tape_attributes ;
230: UINT16 tape_seq_number ;
231: UINT16 password_encryption_algor;
232: UINT16 ecc_algorithm ;
233: UINT16 tape_catalog_type ;
234: MTF_TAPE_ADDRESS tape_name ;
235: MTF_TAPE_ADDRESS tape_description ;
236: MTF_TAPE_ADDRESS tape_password ;
237: MTF_TAPE_ADDRESS software_name ;
238: UINT16 logical_block_size ;
239: UINT16 software_vendor_id ;
240: MTF_DATE_TIME tape_date ;
241: UINT8 tf_major_ver ;
242: } MTF_TAPE, * MTF_TAPE_PTR;
243:
244:
245: /**/
246: /*
247: Start of Set DBLK (SSET)
248: */
249: typedef struct {
250: MTF_DB_HDR block_hdr ;
251: UINT32 sset_attribs ;
252: UINT16 password_encryption_algor ;
253: UINT16 data_encryption_algor ;
254: UINT16 software_vendor_id ;
255: UINT16 backup_set_number ;
256: MTF_TAPE_ADDRESS backup_set_name ;
257: MTF_TAPE_ADDRESS backup_set_description ;
258: MTF_TAPE_ADDRESS backup_set_password ;
259: MTF_TAPE_ADDRESS user_name ;
260: UINT64 physical_block_address ;
261: MTF_DATE_TIME backup_date ;
262: UINT8 software_ver_mjr ;
263: UINT8 software_ver_mnr ;
264: INT8 time_zone ;
265: UINT8 tf_minor_ver ;
266: UINT8 tape_cat_ver ;
267: } MTF_SSET, * MTF_SSET_PTR ;
268:
269:
270: /**/
271: /*
272: Volume DBLK (VOLB)
273: */
274: typedef struct {
275: MTF_DB_HDR block_hdr ;
276: UINT32 volume_attribs ;
277: MTF_TAPE_ADDRESS device_name ;
278: MTF_TAPE_ADDRESS volume_name ;
279: MTF_TAPE_ADDRESS machine_name ;
280: MTF_DATE_TIME backup_date ;
281: } MTF_VOL, * MTF_VOL_PTR ;
282:
283:
284: /**/
285: /*
286: Directory DBLK (DIRB)
287: */
288: typedef struct {
289: MTF_DB_HDR block_hdr ;
290: UINT32 directory_attribs ;
291: MTF_DATE_TIME last_mod_date ;
292: MTF_DATE_TIME create_date ;
293: MTF_DATE_TIME backup_date ;
294: MTF_DATE_TIME last_access_date ;
295: UINT32 directory_id ;
296: MTF_TAPE_ADDRESS directory_name ;
297: } MTF_DIR, * MTF_DIR_PTR ;
298:
299:
300: /**/
301: /*
302: File DBLK (FILE)
303: */
304: typedef struct {
305: MTF_DB_HDR block_hdr ;
306: UINT32 file_attributes ;
307: MTF_DATE_TIME last_mod_date ;
308: MTF_DATE_TIME create_date ;
309: MTF_DATE_TIME backup_date ;
310: MTF_DATE_TIME last_access_date ;
311: UINT32 directory_id ;
312: UINT32 file_id ;
313: MTF_TAPE_ADDRESS file_name ;
314: } MTF_FILE, * MTF_FILE_PTR ;
315:
316:
317: /**/
318: /*
319: Corrupt File DBLK (CFIL)
320: */
321: typedef struct {
322: MTF_DB_HDR block_hdr ;
323: UINT32 corrupt_file_attribs ;
324: UINT32 file_id ;
325: UINT32 directory_id ;
326: UINT64 stream_offset ;
327: UINT16 corrupt_stream_number ;
328: } MTF_CFIL, * MTF_CFIL_PTR ;
329:
330:
331: /**/
332: /*
333: Start of Set DBLK (ESET)
334: */
335: typedef struct {
336: MTF_DB_HDR block_hdr ;
337: UINT32 eset_attribs ;
338: UINT32 corrupt_file_count ;
339: UINT64 set_map_phys_blk_adr ;
340: UINT64 fdd_phys_blk_adr ;
341: UINT16 fdd_tape_seq_number ;
342: UINT16 backup_set_number ;
343: MTF_DATE_TIME backup_date ;
344: } MTF_ESET, * MTF_ESET_PTR ;
345:
346:
347: /**/
348: /*
349: End of Tape DBLK (EOTM)
350: */
351: typedef struct {
352: MTF_DB_HDR block_hdr;
353: UINT64 eset_phys_blk_adr ;
354: } MTF_EOTM, * MTF_EOTM_PTR;
355:
356:
357: /**/
358: /*
359: End of Set Pad DBLK (ESPB)
360: */
361: typedef struct {
362: MTF_DB_HDR block_hdr ;
363: } MTF_ESPB, * MTF_ESPB_PTR ;
364:
365:
366:
367: /***************************************************************************\
368:
369: MTF On Tape Catalog Structures
370:
371: \***************************************************************************/
372:
373: /**/
374: /*
375: Set Map Header
376: */
377: typedef struct {
378: UINT32 family_id ;
379: UINT16 num_set_recs ;
380: UINT8 pad[2] ;
381: } MTF_SM_HDR, * MTF_SM_HDR_PTR ;
382:
383:
384: /**/
385: /*
386: Set Map Entry
387: */
388: typedef struct {
389: UINT16 length ;
390: UINT16 seq_num ;
391: UINT32 blk_attribs ;
392: UINT32 set_attribs ;
393: UINT64 sset_pba ;
394: UINT64 fdd_pba ;
395: UINT16 fdd_seq_num ;
396: UINT16 set_num ;
397: UINT64 lba ;
398: UINT32 num_dirs ;
399: UINT32 num_files ;
400: UINT32 num_corrupt_files ;
401: UINT64 disp_size ;
402: UINT16 num_volumes ;
403: UINT16 pswd_encr_algor ;
404: MTF_TAPE_ADDRESS set_name ;
405: MTF_TAPE_ADDRESS password ;
406: MTF_TAPE_ADDRESS set_descr ;
407: MTF_TAPE_ADDRESS user_name ;
408: MTF_DATE_TIME backup_date ;
409: INT8 time_zone ;
410: UINT8 os_id ;
411: UINT8 os_ver ;
412: UINT8 string_type ;
413: UINT8 tf_minor_ver ;
414: UINT8 tape_cat_ver ;
415: } MTF_SM_ENTRY, * MTF_SM_ENTRY_PTR ;
416:
417:
418: /**/
419: /*
420: File / Directory Detail Common Header
421: */
422: typedef struct {
423: UINT16 length ;
424: UINT8 type[4] ;
425: UINT16 seq_num ;
426: UINT32 blk_attribs ;
427: UINT64 lba ;
428: UINT64 disp_size ;
429: INT32 link ;
430: UINT8 os_id ;
431: UINT8 os_ver ;
432: UINT8 string_type ;
433: UINT8 pad ;
434: } MTF_FDD_HDR, * MTF_FDD_HDR_PTR ;
435:
436:
437: /**/
438: /*
439: File / Directory Detail and Set Map Volume Entry
440: */
441: typedef struct {
442: UINT32 vol_attribs ;
443: MTF_TAPE_ADDRESS device_name ;
444: MTF_TAPE_ADDRESS vol_name ;
445: MTF_TAPE_ADDRESS machine_name ;
446: MTF_DATE_TIME backup_date ;
447: } MTF_FDD_VOL_V1, * MTF_FDD_VOL_V1_PTR ;
448:
449: typedef struct {
450: UINT32 vol_attribs ;
451: MTF_TAPE_ADDRESS device_name ;
452: MTF_TAPE_ADDRESS vol_name ;
453: MTF_TAPE_ADDRESS machine_name ;
454: MTF_TAPE_ADDRESS os_info ;
455: MTF_DATE_TIME backup_date ;
456: } MTF_FDD_VOL_V2, * MTF_FDD_VOL_V2_PTR ;
457:
458:
459: /**/
460: /*
461: File / Directory Detail Directory Entry
462: */
463: typedef struct {
464: MTF_DATE_TIME last_mod_date ;
465: MTF_DATE_TIME create_date ;
466: MTF_DATE_TIME backup_date ;
467: MTF_DATE_TIME last_access_date ;
468: UINT32 dir_attribs ;
469: MTF_TAPE_ADDRESS dir_name ;
470: } MTF_FDD_DIR_V1, * MTF_FDD_DIR_V1_PTR ;
471:
472: typedef struct {
473: MTF_DATE_TIME last_mod_date ;
474: MTF_DATE_TIME create_date ;
475: MTF_DATE_TIME backup_date ;
476: MTF_DATE_TIME last_access_date ;
477: UINT32 dir_attribs ;
478: MTF_TAPE_ADDRESS dir_name ;
479: MTF_TAPE_ADDRESS os_info ;
480: } MTF_FDD_DIR_V2, * MTF_FDD_DIR_V2_PTR ;
481:
482:
483: /**/
484: /*
485: File / Directory Detail File Entry
486: */
487: typedef struct {
488: MTF_DATE_TIME last_mod_date ;
489: MTF_DATE_TIME create_date ;
490: MTF_DATE_TIME backup_date ;
491: MTF_DATE_TIME last_access_date ;
492: UINT32 file_attribs ;
493: MTF_TAPE_ADDRESS file_name ;
494: } MTF_FDD_FILE_V1, * MTF_FDD_FILE_V1_PTR ;
495:
496: typedef struct {
497: MTF_DATE_TIME last_mod_date ;
498: MTF_DATE_TIME create_date ;
499: MTF_DATE_TIME backup_date ;
500: MTF_DATE_TIME last_access_date ;
501: UINT32 file_attribs ;
502: MTF_TAPE_ADDRESS file_name ;
503: MTF_TAPE_ADDRESS os_info ;
504: } MTF_FDD_FILE_V2, * MTF_FDD_FILE_V2_PTR ;
505:
506:
507: /* Turn packing back to what was specified on command line, or default
508: packing.
509: */
510: #pragma pack()
511:
512: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.