]>
Commit | Line | Data |
---|---|---|
34dc7c2f BB |
1 | /* |
2 | * CDDL HEADER START | |
3 | * | |
4 | * The contents of this file are subject to the terms of the | |
5 | * Common Development and Distribution License (the "License"). | |
6 | * You may not use this file except in compliance with the License. | |
7 | * | |
8 | * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
1d3ba0bf | 9 | * or https://opensource.org/licenses/CDDL-1.0. |
34dc7c2f BB |
10 | * See the License for the specific language governing permissions |
11 | * and limitations under the License. | |
12 | * | |
13 | * When distributing Covered Code, include this CDDL HEADER in each | |
14 | * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
15 | * If applicable, add the following below this CDDL HEADER, with the | |
16 | * fields enclosed by brackets "[]" replaced with your own identifying | |
17 | * information: Portions Copyright [yyyy] [name of copyright owner] | |
18 | * | |
19 | * CDDL HEADER END | |
20 | */ | |
21 | /* | |
428870ff | 22 | * Copyright 2010 Sun Microsystems, Inc. All rights reserved. |
34dc7c2f BB |
23 | * Use is subject to license terms. |
24 | */ | |
25 | ||
26 | #ifndef _ZFS_PROP_H | |
739cfb96 | 27 | #define _ZFS_PROP_H extern __attribute__((visibility("default"))) |
34dc7c2f | 28 | |
34dc7c2f BB |
29 | #include <sys/fs/zfs.h> |
30 | #include <sys/types.h> | |
eb51a9d7 | 31 | #include <sys/zfs_sysfs.h> |
34dc7c2f BB |
32 | |
33 | #ifdef __cplusplus | |
34 | extern "C" { | |
35 | #endif | |
36 | ||
37 | /* | |
38 | * For index types (e.g. compression and checksum), we want the numeric value | |
39 | * in the kernel, but the string value in userland. | |
40 | */ | |
41 | typedef enum { | |
42 | PROP_TYPE_NUMBER, /* numeric value */ | |
43 | PROP_TYPE_STRING, /* string value */ | |
44 | PROP_TYPE_INDEX /* numeric value indexed by string */ | |
45 | } zprop_type_t; | |
46 | ||
47 | typedef enum { | |
48 | PROP_DEFAULT, | |
49 | PROP_READONLY, | |
50 | PROP_INHERIT, | |
51 | /* | |
52 | * ONETIME properties are a sort of conglomeration of READONLY | |
53 | * and INHERIT. They can be set only during object creation, | |
54 | * after that they are READONLY. If not explicitly set during | |
b5256303 TC |
55 | * creation, they can be inherited. ONETIME_DEFAULT properties |
56 | * work the same way, but they will default instead of | |
57 | * inheriting a value. | |
34dc7c2f | 58 | */ |
b5256303 TC |
59 | PROP_ONETIME, |
60 | PROP_ONETIME_DEFAULT | |
34dc7c2f BB |
61 | } zprop_attr_t; |
62 | ||
63 | typedef struct zfs_index { | |
64 | const char *pi_name; | |
65 | uint64_t pi_value; | |
66 | } zprop_index_t; | |
67 | ||
68 | typedef struct { | |
69 | const char *pd_name; /* human-readable property name */ | |
70 | int pd_propnum; /* property number */ | |
71 | zprop_type_t pd_proptype; /* string, boolean, index, number */ | |
72 | const char *pd_strdefault; /* default for strings */ | |
73 | uint64_t pd_numdefault; /* for boolean / index / number */ | |
74 | zprop_attr_t pd_attr; /* default, readonly, inherit */ | |
75 | int pd_types; /* bitfield of valid dataset types */ | |
76 | /* fs | vol | snap; or pool */ | |
77 | const char *pd_values; /* string telling acceptable values */ | |
78 | const char *pd_colname; /* column header for "zfs list" */ | |
be8e1d81 AZ |
79 | boolean_t pd_rightalign: 1; /* column alignment for "zfs list" */ |
80 | boolean_t pd_visible: 1; /* do we list this property with the */ | |
34dc7c2f | 81 | /* "zfs get" help message */ |
be8e1d81 AZ |
82 | boolean_t pd_zfs_mod_supported: 1; /* supported by running zfs module */ |
83 | boolean_t pd_always_flex: 1; /* never fixed-width */ | |
34dc7c2f BB |
84 | const zprop_index_t *pd_table; /* for index properties, a table */ |
85 | /* defining the possible values */ | |
428870ff | 86 | size_t pd_table_size; /* number of entries in pd_table[] */ |
34dc7c2f BB |
87 | } zprop_desc_t; |
88 | ||
89 | /* | |
90 | * zfs dataset property functions | |
91 | */ | |
739cfb96 AZ |
92 | _ZFS_PROP_H void zfs_prop_init(void); |
93 | _ZFS_PROP_H zprop_type_t zfs_prop_get_type(zfs_prop_t); | |
94 | _ZFS_PROP_H boolean_t zfs_prop_delegatable(zfs_prop_t prop); | |
95 | _ZFS_PROP_H zprop_desc_t *zfs_prop_get_table(void); | |
34dc7c2f BB |
96 | |
97 | /* | |
98 | * zpool property functions | |
99 | */ | |
739cfb96 AZ |
100 | _ZFS_PROP_H void zpool_prop_init(void); |
101 | _ZFS_PROP_H zprop_type_t zpool_prop_get_type(zpool_prop_t); | |
102 | _ZFS_PROP_H zprop_desc_t *zpool_prop_get_table(void); | |
34dc7c2f | 103 | |
2a673e76 AJ |
104 | /* |
105 | * vdev property functions | |
106 | */ | |
107 | _ZFS_PROP_H void vdev_prop_init(void); | |
108 | _ZFS_PROP_H zprop_type_t vdev_prop_get_type(vdev_prop_t prop); | |
109 | _ZFS_PROP_H zprop_desc_t *vdev_prop_get_table(void); | |
110 | ||
34dc7c2f BB |
111 | /* |
112 | * Common routines to initialize property tables | |
113 | */ | |
739cfb96 | 114 | _ZFS_PROP_H void zprop_register_impl(int, const char *, zprop_type_t, uint64_t, |
34dc7c2f | 115 | const char *, zprop_attr_t, int, const char *, const char *, |
be8e1d81 | 116 | boolean_t, boolean_t, boolean_t, const zprop_index_t *, |
eb51a9d7 | 117 | const struct zfs_mod_supported_features *); |
739cfb96 | 118 | _ZFS_PROP_H void zprop_register_string(int, const char *, const char *, |
eb51a9d7 AZ |
119 | zprop_attr_t attr, int, const char *, const char *, |
120 | const struct zfs_mod_supported_features *); | |
739cfb96 | 121 | _ZFS_PROP_H void zprop_register_number(int, const char *, uint64_t, |
be8e1d81 | 122 | zprop_attr_t, int, const char *, const char *, boolean_t, |
eb51a9d7 | 123 | const struct zfs_mod_supported_features *); |
739cfb96 | 124 | _ZFS_PROP_H void zprop_register_index(int, const char *, uint64_t, zprop_attr_t, |
eb51a9d7 AZ |
125 | int, const char *, const char *, const zprop_index_t *, |
126 | const struct zfs_mod_supported_features *); | |
739cfb96 | 127 | _ZFS_PROP_H void zprop_register_hidden(int, const char *, zprop_type_t, |
be8e1d81 AZ |
128 | zprop_attr_t, int, const char *, boolean_t, |
129 | const struct zfs_mod_supported_features *); | |
34dc7c2f BB |
130 | |
131 | /* | |
132 | * Common routines for zfs and zpool property management | |
133 | */ | |
739cfb96 AZ |
134 | _ZFS_PROP_H int zprop_iter_common(zprop_func, void *, boolean_t, boolean_t, |
135 | zfs_type_t); | |
136 | _ZFS_PROP_H int zprop_name_to_prop(const char *, zfs_type_t); | |
137 | _ZFS_PROP_H int zprop_string_to_index(int, const char *, uint64_t *, | |
138 | zfs_type_t); | |
2a673e76 AJ |
139 | _ZFS_PROP_H int zprop_index_to_string(int, uint64_t, const char **, |
140 | zfs_type_t); | |
739cfb96 AZ |
141 | _ZFS_PROP_H uint64_t zprop_random_value(int, uint64_t, zfs_type_t); |
142 | _ZFS_PROP_H const char *zprop_values(int, zfs_type_t); | |
143 | _ZFS_PROP_H size_t zprop_width(int, boolean_t *, zfs_type_t); | |
144 | _ZFS_PROP_H boolean_t zprop_valid_for_type(int, zfs_type_t, boolean_t); | |
2a673e76 | 145 | _ZFS_PROP_H int zprop_valid_char(char c); |
34dc7c2f BB |
146 | |
147 | #ifdef __cplusplus | |
148 | } | |
149 | #endif | |
150 | ||
151 | #endif /* _ZFS_PROP_H */ |