1/* 2 * volume_id - reads volume label and uuid 3 * 4 * Copyright (C) 2005-2007 Kay Sievers <kay.sievers@vrfy.org> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation version 2 of the License. 9 */ 10 11#ifndef _LIBVOLUME_ID_H_ 12#define _LIBVOLUME_ID_H_ 13 14#include <stdint.h> 15#include <stddef.h> 16 17typedef void (*volume_id_log_fn_t)(int priority, const char *file, int line, const char *format, ...) 18 __attribute__ ((format(printf, 4, 5))); 19extern volume_id_log_fn_t volume_id_log_fn; 20 21struct volume_id; 22typedef int (*volume_id_probe_fn_t)(struct volume_id *id, uint64_t off, uint64_t size); 23typedef int (*all_probers_fn_t)(volume_id_probe_fn_t probe_fn, 24 struct volume_id *id, uint64_t off, uint64_t size, 25 void *data); 26 27extern struct volume_id *volume_id_open_fd(int fd); 28extern void volume_id_close(struct volume_id *id); 29extern int volume_id_probe_filesystem(struct volume_id *id, uint64_t off, uint64_t size); 30extern int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size); 31extern int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size); 32extern const volume_id_probe_fn_t *volume_id_get_prober_by_type(const char *type); 33extern void volume_id_all_probers(all_probers_fn_t all_probers_fn, 34 struct volume_id *id, uint64_t off, uint64_t size, 35 void *data); 36extern int volume_id_get_label(struct volume_id *id, const char **label); 37extern int volume_id_get_label_raw(struct volume_id *id, const uint8_t **label, size_t *len); 38extern int volume_id_get_uuid(struct volume_id *id, const char **uuid); 39extern int volume_id_get_uuid_raw(struct volume_id *id, const uint8_t **uuid, size_t *len); 40extern int volume_id_get_usage(struct volume_id *id, const char **usage); 41extern int volume_id_get_type(struct volume_id *id, const char **type); 42extern int volume_id_get_type_version(struct volume_id *id, const char **type_version); 43extern int volume_id_encode_string(const char *str, char *str_enc, size_t len); 44 45/* 46 * Note: everything below will be made private or removed from 47 * a future version, and a new major release of libvolume_id 48 */ 49 50extern struct volume_id *volume_id_open_node(const char *path); 51 52#define VOLUME_ID_LABEL_SIZE 64 53#define VOLUME_ID_UUID_SIZE 36 54#define VOLUME_ID_FORMAT_SIZE 32 55#define VOLUME_ID_PATH_MAX 256 56#define VOLUME_ID_PARTITIONS_MAX 256 57 58enum volume_id_usage { 59 VOLUME_ID_UNUSED, 60 VOLUME_ID_UNPROBED, 61 VOLUME_ID_OTHER, 62 VOLUME_ID_FILESYSTEM, 63 VOLUME_ID_RAID, 64 VOLUME_ID_DISKLABEL, 65 VOLUME_ID_CRYPTO, 66}; 67 68struct volume_id { 69 uint8_t label_raw[VOLUME_ID_LABEL_SIZE]; 70 size_t label_raw_len; 71 char label[VOLUME_ID_LABEL_SIZE+1]; 72 uint8_t uuid_raw[VOLUME_ID_UUID_SIZE]; 73 size_t uuid_raw_len; 74 char uuid[VOLUME_ID_UUID_SIZE+1]; 75 enum volume_id_usage usage_id; 76 char *usage; 77 char *type; 78 char type_version[VOLUME_ID_FORMAT_SIZE]; 79 80 int fd; 81 uint8_t *sbbuf; 82 size_t sbbuf_len; 83 uint8_t *seekbuf; 84 uint64_t seekbuf_off; 85 size_t seekbuf_len; 86 int fd_close:1; 87}; 88 89/* filesystems */ 90extern int volume_id_probe_cramfs(struct volume_id *id, uint64_t off, uint64_t size); 91extern int volume_id_probe_ext(struct volume_id *id, uint64_t off, uint64_t size); 92extern int volume_id_probe_vfat(struct volume_id *id, uint64_t off, uint64_t size); 93extern int volume_id_probe_hfs_hfsplus(struct volume_id *id, uint64_t off, uint64_t size); 94extern int volume_id_probe_hpfs(struct volume_id *id, uint64_t off, uint64_t size); 95extern int volume_id_probe_iso9660(struct volume_id *id, uint64_t off, uint64_t size); 96extern int volume_id_probe_jfs(struct volume_id *id, uint64_t off, uint64_t size); 97extern int volume_id_probe_minix(struct volume_id *id, uint64_t off, uint64_t size); 98extern int volume_id_probe_ntfs(struct volume_id *id, uint64_t off, uint64_t size); 99extern int volume_id_probe_ocfs1(struct volume_id *id, uint64_t off, uint64_t size); 100extern int volume_id_probe_ocfs2(struct volume_id *id, uint64_t off, uint64_t size); 101extern int volume_id_probe_reiserfs(struct volume_id *id, uint64_t off, uint64_t size); 102extern int volume_id_probe_romfs(struct volume_id *id, uint64_t off, uint64_t size); 103extern int volume_id_probe_sysv(struct volume_id *id, uint64_t off, uint64_t size); 104extern int volume_id_probe_udf(struct volume_id *id, uint64_t off, uint64_t size); 105extern int volume_id_probe_ufs(struct volume_id *id, uint64_t off, uint64_t size); 106extern int volume_id_probe_vxfs(struct volume_id *id, uint64_t off, uint64_t size); 107extern int volume_id_probe_xfs(struct volume_id *id, uint64_t off, uint64_t size); 108extern int volume_id_probe_squashfs(struct volume_id *id, uint64_t off, uint64_t size); 109extern int volume_id_probe_netware(struct volume_id *id, uint64_t off, uint64_t size); 110extern int volume_id_probe_gfs(struct volume_id *id, uint64_t off, uint64_t size); 111extern int volume_id_probe_gfs2(struct volume_id *id, uint64_t off, uint64_t size); 112 113/* special formats */ 114extern int volume_id_probe_linux_swap(struct volume_id *id, uint64_t off, uint64_t size); 115extern int volume_id_probe_luks(struct volume_id *id, uint64_t off, uint64_t size); 116 117/* raid */ 118extern int volume_id_probe_linux_raid(struct volume_id *id, uint64_t off, uint64_t size); 119extern int volume_id_probe_lvm1(struct volume_id *id, uint64_t off, uint64_t size); 120extern int volume_id_probe_lvm2(struct volume_id *id, uint64_t off, uint64_t size); 121extern int volume_id_probe_ddf_raid(struct volume_id *id, uint64_t off, uint64_t size); 122 123/* bios raid */ 124extern int volume_id_probe_intel_software_raid(struct volume_id *id, uint64_t off, uint64_t size); 125extern int volume_id_probe_highpoint_37x_raid(struct volume_id *id, uint64_t off, uint64_t size); 126extern int volume_id_probe_highpoint_45x_raid(struct volume_id *id, uint64_t off, uint64_t size); 127extern int volume_id_probe_lsi_mega_raid(struct volume_id *id, uint64_t off, uint64_t size); 128extern int volume_id_probe_nvidia_raid(struct volume_id *id, uint64_t off, uint64_t size); 129extern int volume_id_probe_promise_fasttrack_raid(struct volume_id *id, uint64_t off, uint64_t size); 130extern int volume_id_probe_silicon_medley_raid(struct volume_id *id, uint64_t off, uint64_t size); 131extern int volume_id_probe_via_raid(struct volume_id *id, uint64_t off, uint64_t size); 132extern int volume_id_probe_adaptec_raid(struct volume_id *id, uint64_t off, uint64_t size); 133extern int volume_id_probe_jmicron_raid(struct volume_id *id, uint64_t off, uint64_t size); 134 135#endif 136