]> git.proxmox.com Git - mirror_ovs.git/blob - lib/uuid.h
ofp-actions: Fix userspace support for mpls_ttl.
[mirror_ovs.git] / lib / uuid.h
1 /* Copyright (c) 2008, 2009, 2010, 2016, 2017 Nicira, Inc.
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
19 #include "openvswitch/uuid.h"
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24
25 /* An initializer or expression for an all-zero UUID. */
26 #define UUID_ZERO ((struct uuid) { .parts = { 0, 0, 0, 0 } })
27
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. */
48 static inline size_t
49 uuid_hash(const struct uuid *uuid)
50 {
51 return uuid->parts[0];
52 }
53
54 /* Returns true if 'a == b', false otherwise. */
55 static inline bool
56 uuid_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
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 */
70 static inline unsigned int
71 uuid_prefix(const struct uuid *uuid, int digits)
72 {
73 return (uuid->parts[0] >> (32 - 4 * digits));
74 }
75
76 void uuid_init(void);
77 void uuid_generate(struct uuid *);
78 struct uuid uuid_random(void);
79 void uuid_zero(struct uuid *);
80 bool uuid_is_zero(const struct uuid *);
81 int uuid_compare_3way(const struct uuid *, const struct uuid *);
82 bool uuid_from_string(struct uuid *, const char *);
83 bool uuid_from_string_prefix(struct uuid *, const char *);
84 int uuid_is_partial_string(const char *);
85 int uuid_is_partial_match(const struct uuid *, const char *match);
86 void uuid_set_bits_v4(struct uuid *);
87
88 #ifdef __cplusplus
89 }
90 #endif
91
92 #endif /* uuid.h */