linux/include/linux/uuid.h
<<
>>
Prefs
   1/*
   2 * UUID/GUID definition
   3 *
   4 * Copyright (C) 2010, 2016 Intel Corp.
   5 *      Huang Ying <ying.huang@intel.com>
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Public License version
   9 * 2 as published by the Free Software Foundation;
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 */
  16#ifndef _LINUX_UUID_H_
  17#define _LINUX_UUID_H_
  18
  19#include <uapi/linux/uuid.h>
  20
  21/*
  22 * V1 (time-based) UUID definition [RFC 4122].
  23 * - the timestamp is a 60-bit value, split 32/16/12, and goes in 100ns
  24 *   increments since midnight 15th October 1582
  25 *   - add AFS_UUID_TO_UNIX_TIME to convert unix time in 100ns units to UUID
  26 *     time
  27 * - the clock sequence is a 14-bit counter to avoid duplicate times
  28 */
  29struct uuid_v1 {
  30        __be32          time_low;                       /* low part of timestamp */
  31        __be16          time_mid;                       /* mid part of timestamp */
  32        __be16          time_hi_and_version;            /* high part of timestamp and version  */
  33#define UUID_TO_UNIX_TIME       0x01b21dd213814000ULL
  34#define UUID_TIMEHI_MASK        0x0fff
  35#define UUID_VERSION_TIME       0x1000  /* time-based UUID */
  36#define UUID_VERSION_NAME       0x3000  /* name-based UUID */
  37#define UUID_VERSION_RANDOM     0x4000  /* (pseudo-)random generated UUID */
  38        u8              clock_seq_hi_and_reserved;      /* clock seq hi and variant */
  39#define UUID_CLOCKHI_MASK       0x3f
  40#define UUID_VARIANT_STD        0x80
  41        u8              clock_seq_low;                  /* clock seq low */
  42        u8              node[6];                        /* spatially unique node ID (MAC addr) */
  43};
  44
  45/*
  46 * The length of a UUID string ("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
  47 * not including trailing NUL.
  48 */
  49#define UUID_STRING_LEN         36
  50
  51static inline int uuid_le_cmp(const uuid_le u1, const uuid_le u2)
  52{
  53        return memcmp(&u1, &u2, sizeof(uuid_le));
  54}
  55
  56static inline int uuid_be_cmp(const uuid_be u1, const uuid_be u2)
  57{
  58        return memcmp(&u1, &u2, sizeof(uuid_be));
  59}
  60
  61void generate_random_uuid(unsigned char uuid[16]);
  62
  63extern void uuid_le_gen(uuid_le *u);
  64extern void uuid_be_gen(uuid_be *u);
  65
  66bool __must_check uuid_is_valid(const char *uuid);
  67
  68extern const u8 uuid_le_index[16];
  69extern const u8 uuid_be_index[16];
  70
  71int uuid_le_to_bin(const char *uuid, uuid_le *u);
  72int uuid_be_to_bin(const char *uuid, uuid_be *u);
  73
  74#endif
  75