[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20170515154308.26739-6-hch@lst.de>
Date: Mon, 15 May 2017 17:42:56 +0200
From: Christoph Hellwig <hch@....de>
To: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
Amir Goldstein <amir73il@...il.com>,
linux-fsdevel@...r.kernel.org
Cc: Shaohua Li <shli@...nel.org>,
Dan Williams <dan.j.williams@...el.com>,
David Howells <dhowells@...hat.com>,
Steven Whitehouse <swhiteho@...hat.com>,
Mimi Zohar <zohar@...ux.vnet.ibm.com>,
linux-xfs@...r.kernel.org, linux-raid@...r.kernel.org,
linux-nvdimm@...ts.01.org, linux-kernel@...r.kernel.org
Subject: [PATCH 05/17] uuid: add the v1 layout to uuid_t
Turn the content of uuid_t into a union and add the fields for the v1
interpretation to it.
Signed-off-by: Christoph Hellwig <hch@....de>
Reviewed-by: David Howells <dhowells@...hat.com>
---
include/uapi/linux/uuid.h | 39 +++++++++++++++++++++++++++++++++------
1 file changed, 33 insertions(+), 6 deletions(-)
diff --git a/include/uapi/linux/uuid.h b/include/uapi/linux/uuid.h
index c31fc94695b9..6b6a583ec1fe 100644
--- a/include/uapi/linux/uuid.h
+++ b/include/uapi/linux/uuid.h
@@ -32,15 +32,42 @@ typedef struct {
(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
typedef struct {
- __u8 b[16];
+ union {
+ __u8 b[16];
+
+ /*
+ * V1 (time-based) UUID definition [RFC 4122]:
+ * - the timestamp is a 60-bit value, split 32/16/12, and goes
+ * in 100ns increments since midnight 15th October 1582
+ * - add UUID_TO_UNIX_TIME to convert unix time in 100ns
+ * units to UUID time
+ * - the clock sequence is a 14-bit counter to avoid duplicate
+ * times
+ */
+ struct {
+ __be32 time_low;
+ __be16 time_mid;
+ __be16 time_hi_and_version;
+#define UUID_TO_UNIX_TIME 0x01b21dd213814000ULL
+#define UUID_TIMEHI_MASK 0x0fff
+#define UUID_VERSION_TIME 0x1000 /* time-based UUID */
+#define UUID_VERSION_NAME 0x3000 /* name-based UUID */
+#define UUID_VERSION_RANDOM 0x4000 /* (pseudo-)random generated UUID */
+ u8 clock_seq_hi_and_reserved;
+#define UUID_CLOCKHI_MASK 0x3f
+#define UUID_VARIANT_STD 0x80
+ u8 clock_seq_low;
+ u8 node[6];
+ } v1;
+ };
} uuid_t;
-#define UUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
-((uuid_t) \
-{{ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \
- ((b) >> 8) & 0xff, (b) & 0xff, \
+#define UUID(a, _b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
+{ .b = { \
+ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \
+ ((_b) >> 8) & 0xff, (_b) & 0xff, \
((c) >> 8) & 0xff, (c) & 0xff, \
- (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
+ (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}
/* backwards compatibility, don't use in new code */
typedef guid_t uuid_le;
--
2.11.0
Powered by blists - more mailing lists