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