/* * Copyright (C) 2008 Karel Zak * * Inspired by libvolume_id by * Kay Sievers * * This file may be redistributed under the terms of the * GNU Lesser General Public License. */ #include #include #include #include #include #include "superblocks.h" struct netware_super_block { uint8_t SBH_Signature[4]; uint16_t SBH_VersionMajor; uint16_t SBH_VersionMinor; uint16_t SBH_VersionMediaMajor; uint16_t SBH_VersionMediaMinor; uint32_t SBH_ItemsMoved; uint8_t SBH_InternalID[16]; uint32_t SBH_PackedSize; uint32_t SBH_Checksum; uint32_t supersyncid; int64_t superlocation[4]; uint32_t physSizeUsed; uint32_t sizeUsed; uint32_t superTimeStamp; uint32_t reserved0[1]; int64_t SBH_LoggedPoolDataBlk; int64_t SBH_PoolDataBlk; uint8_t SBH_OldInternalID[16]; uint32_t SBH_PoolToLVStartUTC; uint32_t SBH_PoolToLVEndUTC; uint16_t SBH_VersionMediaMajorCreate; uint16_t SBH_VersionMediaMinorCreate; uint32_t SBH_BlocksMoved; uint32_t SBH_TempBTSpBlk; uint32_t SBH_TempFTSpBlk; uint32_t SBH_TempFTSpBlk1; uint32_t SBH_TempFTSpBlk2; uint32_t nssMagicNumber; uint32_t poolClassID; uint32_t poolID; uint32_t createTime; int64_t SBH_LoggedVolumeDataBlk; int64_t SBH_VolumeDataBlk; int64_t SBH_SystemBeastBlkNum; uint64_t totalblocks; uint16_t SBH_Name[64]; uint8_t SBH_VolumeID[16]; uint8_t SBH_PoolID[16]; uint8_t SBH_PoolInternalID[16]; uint64_t SBH_Lsn; uint32_t SBH_SS_Enabled; uint32_t SBH_SS_CreateTime; uint8_t SBH_SS_OriginalPoolID[16]; uint8_t SBH_SS_OriginalVolumeID[16]; uint8_t SBH_SS_Guid[16]; uint16_t SBH_SS_OriginalName[64]; uint32_t reserved2[64-(2+46)]; } __attribute__((__packed__)); static int probe_netware(blkid_probe pr, const struct blkid_idmag *mag) { struct netware_super_block *nw; nw = blkid_probe_get_sb(pr, mag, struct netware_super_block); if (!nw) return errno ? -errno : 1; blkid_probe_set_uuid(pr, nw->SBH_PoolID); blkid_probe_sprintf_version(pr, "%u.%02u", le16_to_cpu(nw->SBH_VersionMediaMajor), le16_to_cpu(nw->SBH_VersionMediaMinor)); return 0; } const struct blkid_idinfo netware_idinfo = { .name = "nss", .usage = BLKID_USAGE_FILESYSTEM, .probefunc = probe_netware, .magics = { { .magic = "SPB5", .len = 4, .kboff = 4 }, { NULL } } };