]> git.proxmox.com Git - mirror_ovs.git/blame - lib/uuid.h
bfd: Support overlay BFD
[mirror_ovs.git] / lib / uuid.h
CommitLineData
61be08e4 1/* Copyright (c) 2008, 2009, 2010, 2016, 2017 Nicira, Inc.
d918d9d1
BP
2 *
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef UUID_H
17#define UUID_H 1
18
d5dc60f0 19#include "openvswitch/uuid.h"
d918d9d1 20
9131abe2
YHW
21#ifdef __cplusplus
22extern "C" {
23#endif
24
42a1d93e
BP
25/* An initializer or expression for an all-zero UUID. */
26#define UUID_ZERO ((struct uuid) { .parts = { 0, 0, 0, 0 } })
27
d918d9d1
BP
28/* Formats a UUID as a string, in the conventional format.
29 *
30 * Example:
31 * struct uuid uuid = ...;
32 * printf("This UUID is "UUID_FMT"\n", UUID_ARGS(&uuid));
33 *
34 */
35#define UUID_LEN 36
36#define UUID_FMT "%08x-%04x-%04x-%04x-%04x%08x"
37#define UUID_ARGS(UUID) \
38 ((unsigned int) ((UUID)->parts[0])), \
39 ((unsigned int) ((UUID)->parts[1] >> 16)), \
40 ((unsigned int) ((UUID)->parts[1] & 0xffff)), \
41 ((unsigned int) ((UUID)->parts[2] >> 16)), \
42 ((unsigned int) ((UUID)->parts[2] & 0xffff)), \
43 ((unsigned int) ((UUID)->parts[3]))
44
45/* Returns a hash value for 'uuid'. This hash value is the same regardless of
46 * whether we are running on a 32-bit or 64-bit or big-endian or little-endian
47 * architecture. */
48static inline size_t
49uuid_hash(const struct uuid *uuid)
50{
51 return uuid->parts[0];
52}
53
54/* Returns true if 'a == b', false otherwise. */
55static inline bool
56uuid_equals(const struct uuid *a, const struct uuid *b)
57{
58 return (a->parts[0] == b->parts[0]
59 && a->parts[1] == b->parts[1]
60 && a->parts[2] == b->parts[2]
61 && a->parts[3] == b->parts[3]);
62}
63
1b1d2e6d
BP
64/* Returns the first 'n' hex digits of 'uuid', for 0 < 'n' <= 8.
65 *
66 * This is useful for displaying a few leading digits of the uuid, e.g. to
67 * display 4 digits:
68 * printf("%04x", uuid_prefix(uuid, 4));
69 */
70static inline unsigned int
71uuid_prefix(const struct uuid *uuid, int digits)
72{
73 return (uuid->parts[0] >> (32 - 4 * digits));
74}
75
d918d9d1
BP
76void uuid_init(void);
77void uuid_generate(struct uuid *);
ffa3493a 78struct uuid uuid_random(void);
d918d9d1 79void uuid_zero(struct uuid *);
c532bf9d 80bool uuid_is_zero(const struct uuid *);
d918d9d1
BP
81int uuid_compare_3way(const struct uuid *, const struct uuid *);
82bool uuid_from_string(struct uuid *, const char *);
d0d15d58 83bool uuid_from_string_prefix(struct uuid *, const char *);
c80eac1f 84int uuid_is_partial_string(const char *);
61be08e4 85int uuid_is_partial_match(const struct uuid *, const char *match);
78145f6e 86void uuid_set_bits_v4(struct uuid *);
d918d9d1 87
9131abe2
YHW
88#ifdef __cplusplus
89}
90#endif
91
27365e26 92#endif /* uuid.h */