]> err.no Git - util-linux/commitdiff
blkid: add netware (NSS)
authorKarel Zak <kzak@redhat.com>
Thu, 4 Dec 2008 10:56:54 +0000 (11:56 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 11 Feb 2009 22:21:49 +0000 (23:21 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libs/blkid/src/probe.c
libs/blkid/src/probers/Makefile.am
libs/blkid/src/probers/netware.c [new file with mode: 0644]
libs/blkid/src/probers/probers.h

index 29f8658daca47f0541a173b25fb108401e4ce9b4..7c01546aaecd179250b3f7f1530c2e6f8ad5e851 100644 (file)
@@ -85,7 +85,7 @@ static const struct blkid_idinfo *idinfos[] =
        &oracleasm_idinfo,
        &vxfs_idinfo,
        &squashfs_idinfo,
-       /* TODO: netware */
+       &netware_idinfo
 };
 
 #ifndef ARRAY_SIZE
index 21a4b03ceab3e5cba1175fb3f0a3adc8f3cf7a5a..36d9fa90760c9482c35c4247e6630f9b7206c4f5 100644 (file)
@@ -36,6 +36,7 @@ libprobers_a_SOURCES =        probers.h \
                        ufs.c \
                        hpfs.c \
                        squashfs.c \
+                       netware.c \
                        lvm.c
 
 all-local: $(lib_LIBRARIES)
diff --git a/libs/blkid/src/probers/netware.c b/libs/blkid/src/probers/netware.c
new file mode 100644 (file)
index 0000000..bfd5e2e
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2008 Karel Zak <kzak@redhat.com>
+ *
+ * Inspired by libvolume_id by
+ *     Kay Sievers <kay.sievers@vrfy.org>
+ *
+ * This file may be redistributed under the terms of the
+ * GNU Lesser General Public License.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "blkidP.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)];
+};
+
+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 -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 }
+       }
+};
+
+
index f295fbeae9248af8da97069b170747c8d8f110fd..76a3c7951b52774ab715ed8defcd4a5d5b8dc9af 100644 (file)
@@ -51,5 +51,7 @@ extern const struct blkid_idinfo luks_idinfo;
 extern const struct blkid_idinfo highpoint37x_idinfo;
 extern const struct blkid_idinfo highpoint45x_idinfo;
 extern const struct blkid_idinfo squashfs_idinfo;
+extern const struct blkid_idinfo netware_idinfo;
+
 
 #endif /* _BLKID_PROBE_H */