#ifndef _SYS_DMU_H
#define _SYS_DMU_H
#define B_FALSE 0
#define B_TRUE 1
#define DMU_OT_NEWTYPE 0x80
#define DMU_OT_METADATA 0x40
#define DMU_OT_BYTESWAP_MASK 0x3f
#define DMU_OT(byteswap, metadata) \
(DMU_OT_NEWTYPE | \
((metadata) ? DMU_OT_METADATA : 0) | \
((byteswap) & DMU_OT_BYTESWAP_MASK))
#define DMU_OT_IS_VALID(ot) (((ot) & DMU_OT_NEWTYPE) ? \
((ot) & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS : \
(ot) < DMU_OT_NUMTYPES)
#define DMU_OT_IS_METADATA(ot) (((ot) & DMU_OT_NEWTYPE) ? \
((ot) & DMU_OT_METADATA) : \
dmu_ot[(ot)].ot_metadata)
typedef enum dmu_object_byteswap {
DMU_BSWAP_UINT8,
DMU_BSWAP_UINT16,
DMU_BSWAP_UINT32,
DMU_BSWAP_UINT64,
DMU_BSWAP_ZAP,
DMU_BSWAP_DNODE,
DMU_BSWAP_OBJSET,
DMU_BSWAP_ZNODE,
DMU_BSWAP_OLDACL,
DMU_BSWAP_ACL,
DMU_BSWAP_NUMFUNCS
} dmu_object_byteswap_t;
typedef enum dmu_object_type {
DMU_OT_NONE,
DMU_OT_OBJECT_DIRECTORY,
DMU_OT_OBJECT_ARRAY,
DMU_OT_PACKED_NVLIST,
DMU_OT_PACKED_NVLIST_SIZE,
DMU_OT_BPOBJ,
DMU_OT_BPOBJ_HDR,
DMU_OT_SPACE_MAP_HEADER,
DMU_OT_SPACE_MAP,
DMU_OT_INTENT_LOG,
DMU_OT_DNODE,
DMU_OT_OBJSET,
DMU_OT_DSL_DIR,
DMU_OT_DSL_DIR_CHILD_MAP,
DMU_OT_DSL_DS_SNAP_MAP,
DMU_OT_DSL_PROPS,
DMU_OT_DSL_DATASET,
DMU_OT_ZNODE,
DMU_OT_OLDACL,
DMU_OT_PLAIN_FILE_CONTENTS,
DMU_OT_DIRECTORY_CONTENTS,
DMU_OT_MASTER_NODE,
DMU_OT_UNLINKED_SET,
DMU_OT_ZVOL,
DMU_OT_ZVOL_PROP,
DMU_OT_PLAIN_OTHER,
DMU_OT_UINT64_OTHER,
DMU_OT_ZAP_OTHER,
DMU_OT_ERROR_LOG,
DMU_OT_SPA_HISTORY,
DMU_OT_SPA_HISTORY_OFFSETS,
DMU_OT_POOL_PROPS,
DMU_OT_DSL_PERMS,
DMU_OT_ACL,
DMU_OT_SYSACL,
DMU_OT_FUID,
DMU_OT_FUID_SIZE,
DMU_OT_NEXT_CLONES,
DMU_OT_SCAN_QUEUE,
DMU_OT_USERGROUP_USED,
DMU_OT_USERGROUP_QUOTA,
DMU_OT_USERREFS,
DMU_OT_DDT_ZAP,
DMU_OT_DDT_STATS,
DMU_OT_SA,
DMU_OT_SA_MASTER_NODE,
DMU_OT_SA_ATTR_REGISTRATION,
DMU_OT_SA_ATTR_LAYOUTS,
DMU_OT_SCAN_XLATE,
DMU_OT_DEDUP,
DMU_OT_DEADLIST,
DMU_OT_DEADLIST_HDR,
DMU_OT_DSL_CLONES,
DMU_OT_BPOBJ_SUBOBJ,
DMU_OT_NUMTYPES,
DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE),
DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE),
DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE),
DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE),
DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE),
DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE),
DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE),
DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE),
DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE),
DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE),
} dmu_object_type_t;
typedef enum dmu_objset_type {
DMU_OST_NONE,
DMU_OST_META,
DMU_OST_ZFS,
DMU_OST_ZVOL,
DMU_OST_OTHER,
DMU_OST_ANY,
DMU_OST_NUMTYPES
} dmu_objset_type_t;
#define DMU_POOL_DIRECTORY_OBJECT 1
#define DMU_POOL_CONFIG "config"
#define DMU_POOL_FEATURES_FOR_READ "features_for_read"
#define DMU_POOL_FEATURES_FOR_WRITE "features_for_write"
#define DMU_POOL_FEATURE_DESCRIPTIONS "feature_descriptions"
#define DMU_POOL_ROOT_DATASET "root_dataset"
#define DMU_POOL_SYNC_BPLIST "sync_bplist"
#define DMU_POOL_ERRLOG_SCRUB "errlog_scrub"
#define DMU_POOL_ERRLOG_LAST "errlog_last"
#define DMU_POOL_SPARES "spares"
#define DMU_POOL_DEFLATE "deflate"
#define DMU_POOL_HISTORY "history"
#define DMU_POOL_PROPS "pool_props"
#define DMU_POOL_L2CACHE "l2cache"
#endif