]>
git.ipfire.org Git - thirdparty/util-linux.git/blob - include/loopdev.h
1 #ifndef UTIL_LINUX_LOOPDEV_H
2 #define UTIL_LINUX_LOOPDEV_H
7 * loop_info.lo_encrypt_type
9 #define LO_CRYPT_NONE 0
10 #define LO_CRYPT_XOR 1
11 #define LO_CRYPT_DES 2
12 #define LO_CRYPT_CRYPTOAPI 18
14 #define LOOP_SET_FD 0x4C00
15 #define LOOP_CLR_FD 0x4C01
17 * Obsolete (kernel < 2.6)
19 * #define LOOP_SET_STATUS 0x4C02
20 * #define LOOP_GET_STATUS 0x4C03
22 #define LOOP_SET_STATUS64 0x4C04
23 #define LOOP_GET_STATUS64 0x4C05
24 /* #define LOOP_CHANGE_FD 0x4C06 */
25 #define LOOP_SET_CAPACITY 0x4C07
27 /* /dev/loop-control interface */
29 # define LOOP_CTL_ADD 0x4C80
30 # define LOOP_CTL_REMOVE 0x4C81
31 # define LOOP_CTL_GET_FREE 0x4C82
38 LO_FLAGS_READ_ONLY
= 1,
39 LO_FLAGS_USE_AOPS
= 2,
40 LO_FLAGS_AUTOCLEAR
= 4, /* kernel >= 2.6.25 */
41 LO_FLAGS_PARTSCAN
= 8, /* kernel >= 3.2 */
44 #define LO_NAME_SIZE 64
45 #define LO_KEY_SIZE 32
48 * Linux LOOP_{SET,GET}_STATUS64 ioclt struct
55 uint64_t lo_sizelimit
; /* bytes, 0 == max available */
57 uint32_t lo_encrypt_type
;
58 uint32_t lo_encrypt_key_size
;
60 uint8_t lo_file_name
[LO_NAME_SIZE
];
61 uint8_t lo_crypt_name
[LO_NAME_SIZE
];
62 uint8_t lo_encrypt_key
[LO_KEY_SIZE
];
66 #define LOOPDEV_MAJOR 7 /* loop major number */
67 #define LOOPDEV_DEFAULT_NNODES 8 /* default number of loop devices */
70 FILE *proc
; /* /proc/partitions */
71 DIR *sysblock
; /* /sys/block */
72 int ncur
; /* current position */
73 int *minors
; /* ary of minor numbers (when scan whole /dev) */
74 int nminors
; /* number of items in *minors */
75 int ct_perm
; /* count permission problems */
76 int ct_succ
; /* count number of detected devices */
78 unsigned int done
:1; /* scanning done */
79 unsigned int default_check
:1;/* check first LOOPDEV_NLOOPS */
80 int flags
; /* LOOPITER_FL_* flags */
84 LOOPITER_FL_FREE
= (1 << 0),
85 LOOPITER_FL_USED
= (1 << 1)
89 * handler for work with loop devices
92 char device
[128]; /* device path (e.g. /dev/loop<N>) */
93 char *filename
; /* backing file for loopcxt_set_... */
94 int fd
; /* open(/dev/looo<N>) */
95 int mode
; /* fd mode O_{RDONLY,RDWR} */
97 int flags
; /* LOOPDEV_FL_* flags */
98 unsigned int has_info
:1; /* .info contains data */
99 unsigned int extra_check
:1; /* unusual stuff for iterator */
100 unsigned int debug
:1; /* debug mode ON/OFF */
101 unsigned int info_failed
:1; /* LOOP_GET_STATUS ioctl failed */
102 unsigned int control_ok
:1; /* /dev/loop-control success */
104 struct sysfs_cxt sysfs
; /* pointer to /sys/dev/block/<maj:min>/ */
105 struct loop_info64 info
; /* for GET/SET ioctl */
106 struct loopdev_iter iter
; /* scans /sys or /dev for used/free devices */
109 #define UL_LOOPDEVCXT_EMPTY { .fd = -1, .sysfs = UL_SYSFSCXT_EMPTY }
115 LOOPDEV_FL_RDONLY
= (1 << 0), /* open(/dev/loop) mode; default */
116 LOOPDEV_FL_RDWR
= (1 << 1), /* necessary for loop setup only */
117 LOOPDEV_FL_OFFSET
= (1 << 4),
118 LOOPDEV_FL_NOSYSFS
= (1 << 5),
119 LOOPDEV_FL_NOIOCTL
= (1 << 6),
120 LOOPDEV_FL_DEVSUBDIR
= (1 << 7),
121 LOOPDEV_FL_CONTROL
= (1 << 8), /* system with /dev/loop-control */
122 LOOPDEV_FL_SIZELIMIT
= (1 << 9)
128 extern int loopmod_supports_partscan(void);
130 extern int is_loopdev(const char *device
);
131 extern int loopdev_is_autoclear(const char *device
);
133 extern char *loopdev_get_backing_file(const char *device
);
134 extern int loopdev_is_used(const char *device
, const char *filename
,
135 uint64_t offset
, int flags
);
136 extern char *loopdev_find_by_backing_file(const char *filename
,
137 uint64_t offset
, int flags
);
138 extern int loopcxt_find_unused(struct loopdev_cxt
*lc
);
139 extern int loopdev_delete(const char *device
);
140 extern int loopdev_count_by_backing_file(const char *filename
, char **loopdev
);
145 extern int loopcxt_init(struct loopdev_cxt
*lc
, int flags
)
146 __attribute__ ((warn_unused_result
));
147 extern void loopcxt_deinit(struct loopdev_cxt
*lc
);
148 extern void loopcxt_enable_debug(struct loopdev_cxt
*lc
, int enable
);
150 extern int loopcxt_set_device(struct loopdev_cxt
*lc
, const char *device
)
151 __attribute__ ((warn_unused_result
));
152 extern int loopcxt_has_device(struct loopdev_cxt
*lc
);
153 extern int loopcxt_add_device(struct loopdev_cxt
*lc
);
154 extern char *loopcxt_strdup_device(struct loopdev_cxt
*lc
);
155 extern const char *loopcxt_get_device(struct loopdev_cxt
*lc
);
156 extern struct sysfs_cxt
*loopcxt_get_sysfs(struct loopdev_cxt
*lc
);
157 extern struct loop_info64
*loopcxt_get_info(struct loopdev_cxt
*lc
);
159 extern int loopcxt_get_fd(struct loopdev_cxt
*lc
);
160 extern int loopcxt_set_fd(struct loopdev_cxt
*lc
, int fd
, int mode
);
162 extern int loopcxt_init_iterator(struct loopdev_cxt
*lc
, int flags
);
163 extern int loopcxt_deinit_iterator(struct loopdev_cxt
*lc
);
164 extern int loopcxt_next(struct loopdev_cxt
*lc
);
166 extern int loopcxt_setup_device(struct loopdev_cxt
*lc
);
167 extern int loopcxt_delete_device(struct loopdev_cxt
*lc
);
168 extern int loopcxt_set_capacity(struct loopdev_cxt
*lc
);
170 int loopcxt_set_offset(struct loopdev_cxt
*lc
, uint64_t offset
);
171 int loopcxt_set_sizelimit(struct loopdev_cxt
*lc
, uint64_t sizelimit
);
172 int loopcxt_set_flags(struct loopdev_cxt
*lc
, uint32_t flags
);
173 int loopcxt_set_backing_file(struct loopdev_cxt
*lc
, const char *filename
);
175 extern char *loopcxt_get_backing_file(struct loopdev_cxt
*lc
);
176 extern int loopcxt_get_backing_devno(struct loopdev_cxt
*lc
, dev_t
*devno
);
177 extern int loopcxt_get_backing_inode(struct loopdev_cxt
*lc
, ino_t
*ino
);
178 extern int loopcxt_get_offset(struct loopdev_cxt
*lc
, uint64_t *offset
);
179 extern int loopcxt_get_sizelimit(struct loopdev_cxt
*lc
, uint64_t *size
);
180 extern int loopcxt_get_encrypt_type(struct loopdev_cxt
*lc
, uint32_t *type
);
181 extern const char *loopcxt_get_crypt_name(struct loopdev_cxt
*lc
);
182 extern int loopcxt_is_autoclear(struct loopdev_cxt
*lc
);
183 extern int loopcxt_is_readonly(struct loopdev_cxt
*lc
);
184 extern int loopcxt_is_partscan(struct loopdev_cxt
*lc
);
185 extern int loopcxt_find_by_backing_file(struct loopdev_cxt
*lc
,
186 const char *filename
,
187 uint64_t offset
, int flags
);
189 extern int loopcxt_is_used(struct loopdev_cxt
*lc
,
191 const char *backing_file
,
195 #endif /* UTIL_LINUX_LOOPDEV_H */