1 /*	$NetBSD: import-export.h,v 1.1.1.1 2008/12/22 00:18:16 haad Exp $	*/
2 
3 /*
4  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
5  * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
6  *
7  * This file is part of LVM2.
8  *
9  * This copyrighted material is made available to anyone wishing to use,
10  * modify, copy, or redistribute it subject to the terms and conditions
11  * of the GNU Lesser General Public License v.2.1.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program; if not, write to the Free Software Foundation,
15  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16  */
17 
18 #ifndef _LVM_TEXT_IMPORT_EXPORT_H
19 #define _LVM_TEXT_IMPORT_EXPORT_H
20 
21 #include "config.h"
22 #include "lvm-types.h"
23 #include "metadata.h"
24 
25 #include <stdio.h>
26 
27 /*
28  * Constants to identify files this code can parse.
29  */
30 #define CONTENTS_FIELD "contents"
31 #define CONTENTS_VALUE "Text Format Volume Group"
32 
33 #define FORMAT_VERSION_FIELD "version"
34 #define FORMAT_VERSION_VALUE 1
35 
36 /*
37  * VGs, PVs and LVs all have status bitsets, we gather together
38  * common code for reading and writing them.
39  */
40 enum {
41 	COMPATIBLE_FLAG = 0x0,
42 	VG_FLAGS,
43 	PV_FLAGS,
44 	LV_FLAGS,
45 	STATUS_FLAG = 0x8,
46 };
47 
48 struct text_vg_version_ops {
49 	int (*check_version) (struct config_tree * cf);
50 	struct volume_group *(*read_vg) (struct format_instance * fid,
51 					 struct config_tree * cf);
52 	void (*read_desc) (struct dm_pool * mem, struct config_tree * cf,
53 			   time_t *when, char **desc);
54 	const char *(*read_vgname) (const struct format_type *fmt,
55 				    struct config_tree *cft,
56 				    struct id *vgid, uint32_t *vgstatus,
57 				    char **creation_host);
58 };
59 
60 struct text_vg_version_ops *text_vg_vsn1_init(void);
61 
62 int print_flags(uint32_t status, int type, char *buffer, size_t size);
63 int read_flags(uint32_t *status, int type, struct config_value *cv);
64 
65 int print_tags(struct dm_list *tags, char *buffer, size_t size);
66 int read_tags(struct dm_pool *mem, struct dm_list *tags, struct config_value *cv);
67 
68 int text_vg_export_file(struct volume_group *vg, const char *desc, FILE *fp);
69 int text_vg_export_raw(struct volume_group *vg, const char *desc, char **buf);
70 struct volume_group *text_vg_import_file(struct format_instance *fid,
71 					 const char *file,
72 					 time_t *when, char **desc);
73 struct volume_group *text_vg_import_fd(struct format_instance *fid,
74 				       const char *file,
75 				       struct device *dev,
76 				       off_t offset, uint32_t size,
77 				       off_t offset2, uint32_t size2,
78 				       checksum_fn_t checksum_fn,
79 				       uint32_t checksum,
80 				       time_t *when, char **desc);
81 const char *text_vgname_import(const struct format_type *fmt,
82 			       struct device *dev,
83                                off_t offset, uint32_t size,
84                                off_t offset2, uint32_t size2,
85                                checksum_fn_t checksum_fn, uint32_t checksum,
86                                struct id *vgid, uint32_t *vgstatus,
87 			       char **creation_host);
88 
89 #endif
90