1  /*
       2   * uuid.h -- private header file for uuids
       3   *
       4   * Copyright (C) 1996, 1997 Theodore Ts'o.
       5   *
       6   * %Begin-Header%
       7   * Redistribution and use in source and binary forms, with or without
       8   * modification, are permitted provided that the following conditions
       9   * are met:
      10   * 1. Redistributions of source code must retain the above copyright
      11   *    notice, and the entire permission notice in its entirety,
      12   *    including the disclaimer of warranties.
      13   * 2. Redistributions in binary form must reproduce the above copyright
      14   *    notice, this list of conditions and the following disclaimer in the
      15   *    documentation and/or other materials provided with the distribution.
      16   * 3. The name of the author may not be used to endorse or promote
      17   *    products derived from this software without specific prior
      18   *    written permission.
      19   *
      20   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
      21   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
      22   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
      23   * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
      24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
      26   * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
      27   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
      28   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      29   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
      30   * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
      31   * DAMAGE.
      32   * %End-Header%
      33   */
      34  #ifndef _UUID_UUID_PRIVATE_H
      35  #define _UUID_UUID_PRIVATE_H
      36  
      37  #include <inttypes.h>
      38  #include <sys/types.h>
      39  
      40  #include "uuid.h"
      41  
      42  #define LIBUUID_CLOCK_FILE	"/var/lib/libuuid/clock.txt"
      43  
      44  /*
      45   * Offset between 15-Oct-1582 and 1-Jan-70
      46   */
      47  #define TIME_OFFSET_HIGH 0x01B21DD2
      48  #define TIME_OFFSET_LOW  0x13814000
      49  
      50  /*
      51   * Note that RFC4122 defines UUID in more details:
      52   *
      53   *     Field               Data Type     Octet  Note
      54   * -------------------------------------------------
      55   *  time_low               unsigned 32   0-3    The low field of the
      56   *                         bit integer          timestamp
      57   *
      58   *  time_mid               unsigned 16   4-5    The middle field of the
      59   *                         bit integer          timestamp
      60   *
      61   *  time_hi_and_version    unsigned 16   6-7    The high field of the
      62   *                         bit integer          timestamp multiplexed
      63   *                                              with the version number
      64   *
      65   *  clock_seq_hi_and_rese  unsigned 8    8      The high field of the
      66   *  rved                   bit integer          clock sequence
      67   *                                              multiplexed with the
      68   *                                              variant
      69   *
      70   *  clock_seq_low          unsigned 8    9      The low field of the
      71   *                         bit integer          clock sequence
      72   *
      73   *  node                   unsigned 48   10-15  The spatially unique
      74   *                         bit integer          node identifier
      75   *
      76   * We have clock_seq_hi_and_reserved (8bit) and clock_seq_low (8bit)
      77   * merged into clock_seq (16bit).
      78   */
      79  struct uuid {
      80  	uint32_t	time_low;
      81  	uint16_t	time_mid;
      82  	uint16_t	time_hi_and_version;
      83  	uint16_t	clock_seq;
      84  	uint8_t	node[6];
      85  };
      86  
      87  
      88  /*
      89   * prototypes
      90   */
      91  void uuid_pack(const struct uuid *uu, uuid_t ptr);
      92  void uuid_unpack(const uuid_t in, struct uuid *uu);
      93  
      94  #endif /* _UUID_UUID_PRIVATE_H */