zfs_ioctl_compat.h revision 249319
1219089Spjd/* 2219089Spjd * CDDL HEADER START 3219089Spjd * 4219089Spjd * The contents of this file are subject to the terms of the 5219089Spjd * Common Development and Distribution License (the "License"). 6219089Spjd * You may not use this file except in compliance with the License. 7219089Spjd * 8219089Spjd * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9219089Spjd * or http://www.opensolaris.org/os/licensing. 10219089Spjd * See the License for the specific language governing permissions 11219089Spjd * and limitations under the License. 12219089Spjd * 13219089Spjd * When distributing Covered Code, include this CDDL HEADER in each 14219089Spjd * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15219089Spjd * If applicable, add the following below this CDDL HEADER, with the 16219089Spjd * fields enclosed by brackets "[]" replaced with your own identifying 17219089Spjd * information: Portions Copyright [yyyy] [name of copyright owner] 18219089Spjd * 19219089Spjd * CDDL HEADER END 20219089Spjd */ 21219089Spjd/* 22247540Smm * Copyright 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved. 23219089Spjd * Use is subject to license terms. 24219089Spjd */ 25219089Spjd 26219089Spjd#ifndef _SYS_ZFS_IOCTL_COMPAT_H 27219089Spjd#define _SYS_ZFS_IOCTL_COMPAT_H 28219089Spjd 29219089Spjd#include <sys/cred.h> 30219089Spjd#include <sys/dmu.h> 31219089Spjd#include <sys/zio.h> 32219089Spjd#include <sys/dsl_deleg.h> 33219089Spjd#include <sys/zfs_ioctl.h> 34219089Spjd 35219089Spjd#ifdef _KERNEL 36219089Spjd#include <sys/nvpair.h> 37219089Spjd#endif /* _KERNEL */ 38219089Spjd 39219089Spjd#ifdef __cplusplus 40219089Spjdextern "C" { 41219089Spjd#endif 42219089Spjd 43247540Smm/* 44247540Smm * Backwards ioctl compatibility 45247540Smm */ 46247540Smm 47247540Smm/* ioctl versions for vfs.zfs.version.ioctl */ 48248571Smm#define ZFS_IOCVER_UNDEF -1 49248571Smm#define ZFS_IOCVER_NONE 0 50247540Smm#define ZFS_IOCVER_DEADMAN 1 51248571Smm#define ZFS_IOCVER_LZC 2 52249319Smm#define ZFS_IOCVER_ZCMD 3 53249319Smm#define ZFS_IOCVER_CURRENT ZFS_IOCVER_ZCMD 54247540Smm 55247540Smm/* compatibility conversion flag */ 56247540Smm#define ZFS_CMD_COMPAT_NONE 0 57219089Spjd#define ZFS_CMD_COMPAT_V15 1 58247540Smm#define ZFS_CMD_COMPAT_V28 2 59248571Smm#define ZFS_CMD_COMPAT_DEADMAN 3 60249319Smm#define ZFS_CMD_COMPAT_LZC 4 61219089Spjd 62247540Smm#define ZFS_IOC_COMPAT_PASS 254 63247540Smm#define ZFS_IOC_COMPAT_FAIL 255 64219089Spjd 65248571Smm#define ZFS_IOCREQ(ioreq) ((ioreq) & 0xff) 66248571Smm 67249319Smmtypedef struct zfs_iocparm { 68249319Smm uint32_t zfs_ioctl_version; 69249319Smm uint64_t zfs_cmd; 70249319Smm uint64_t zfs_cmd_size; 71249319Smm} zfs_iocparm_t; 72249319Smm 73219089Spjdtypedef struct zinject_record_v15 { 74219089Spjd uint64_t zi_objset; 75219089Spjd uint64_t zi_object; 76219089Spjd uint64_t zi_start; 77219089Spjd uint64_t zi_end; 78219089Spjd uint64_t zi_guid; 79219089Spjd uint32_t zi_level; 80219089Spjd uint32_t zi_error; 81219089Spjd uint64_t zi_type; 82219089Spjd uint32_t zi_freq; 83219089Spjd uint32_t zi_failfast; 84219089Spjd} zinject_record_v15_t; 85219089Spjd 86219089Spjdtypedef struct zfs_cmd_v15 { 87219089Spjd char zc_name[MAXPATHLEN]; 88219089Spjd char zc_value[MAXPATHLEN]; 89219089Spjd char zc_string[MAXNAMELEN]; 90219089Spjd uint64_t zc_guid; 91219089Spjd uint64_t zc_nvlist_conf; /* really (char *) */ 92219089Spjd uint64_t zc_nvlist_conf_size; 93219089Spjd uint64_t zc_nvlist_src; /* really (char *) */ 94219089Spjd uint64_t zc_nvlist_src_size; 95219089Spjd uint64_t zc_nvlist_dst; /* really (char *) */ 96219089Spjd uint64_t zc_nvlist_dst_size; 97219089Spjd uint64_t zc_cookie; 98219089Spjd uint64_t zc_objset_type; 99219089Spjd uint64_t zc_perm_action; 100219089Spjd uint64_t zc_history; /* really (char *) */ 101219089Spjd uint64_t zc_history_len; 102219089Spjd uint64_t zc_history_offset; 103219089Spjd uint64_t zc_obj; 104219089Spjd zfs_share_t zc_share; 105219089Spjd uint64_t zc_jailid; 106219089Spjd dmu_objset_stats_t zc_objset_stats; 107219089Spjd struct drr_begin zc_begin_record; 108219089Spjd zinject_record_v15_t zc_inject_record; 109219089Spjd} zfs_cmd_v15_t; 110219089Spjd 111247540Smmtypedef struct zinject_record_v28 { 112247540Smm uint64_t zi_objset; 113247540Smm uint64_t zi_object; 114247540Smm uint64_t zi_start; 115247540Smm uint64_t zi_end; 116247540Smm uint64_t zi_guid; 117247540Smm uint32_t zi_level; 118247540Smm uint32_t zi_error; 119247540Smm uint64_t zi_type; 120247540Smm uint32_t zi_freq; 121247540Smm uint32_t zi_failfast; 122247540Smm char zi_func[MAXNAMELEN]; 123247540Smm uint32_t zi_iotype; 124247540Smm int32_t zi_duration; 125247540Smm uint64_t zi_timer; 126247540Smm} zinject_record_v28_t; 127247540Smm 128247540Smmtypedef struct zfs_cmd_v28 { 129247540Smm char zc_name[MAXPATHLEN]; 130247540Smm char zc_value[MAXPATHLEN * 2]; 131247540Smm char zc_string[MAXNAMELEN]; 132247540Smm char zc_top_ds[MAXPATHLEN]; 133247540Smm uint64_t zc_guid; 134247540Smm uint64_t zc_nvlist_conf; /* really (char *) */ 135247540Smm uint64_t zc_nvlist_conf_size; 136247540Smm uint64_t zc_nvlist_src; /* really (char *) */ 137247540Smm uint64_t zc_nvlist_src_size; 138247540Smm uint64_t zc_nvlist_dst; /* really (char *) */ 139247540Smm uint64_t zc_nvlist_dst_size; 140247540Smm uint64_t zc_cookie; 141247540Smm uint64_t zc_objset_type; 142247540Smm uint64_t zc_perm_action; 143247540Smm uint64_t zc_history; /* really (char *) */ 144247540Smm uint64_t zc_history_len; 145247540Smm uint64_t zc_history_offset; 146247540Smm uint64_t zc_obj; 147247540Smm uint64_t zc_iflags; /* internal to zfs(7fs) */ 148247540Smm zfs_share_t zc_share; 149247540Smm uint64_t zc_jailid; 150247540Smm dmu_objset_stats_t zc_objset_stats; 151247540Smm struct drr_begin zc_begin_record; 152247540Smm zinject_record_v28_t zc_inject_record; 153247540Smm boolean_t zc_defer_destroy; 154247540Smm boolean_t zc_temphold; 155247540Smm uint64_t zc_action_handle; 156247540Smm int zc_cleanup_fd; 157247540Smm uint8_t zc_simple; 158247540Smm uint8_t zc_pad[3]; /* alignment */ 159247540Smm uint64_t zc_sendobj; 160247540Smm uint64_t zc_fromobj; 161247540Smm uint64_t zc_createtxg; 162247540Smm zfs_stat_t zc_stat; 163247540Smm} zfs_cmd_v28_t; 164247540Smm 165248571Smmtypedef struct zfs_cmd_deadman { 166248571Smm char zc_name[MAXPATHLEN]; 167248571Smm char zc_value[MAXPATHLEN * 2]; 168248571Smm char zc_string[MAXNAMELEN]; 169248571Smm char zc_top_ds[MAXPATHLEN]; 170248571Smm uint64_t zc_guid; 171248571Smm uint64_t zc_nvlist_conf; /* really (char *) */ 172248571Smm uint64_t zc_nvlist_conf_size; 173248571Smm uint64_t zc_nvlist_src; /* really (char *) */ 174248571Smm uint64_t zc_nvlist_src_size; 175248571Smm uint64_t zc_nvlist_dst; /* really (char *) */ 176248571Smm uint64_t zc_nvlist_dst_size; 177248571Smm uint64_t zc_cookie; 178248571Smm uint64_t zc_objset_type; 179248571Smm uint64_t zc_perm_action; 180248571Smm uint64_t zc_history; /* really (char *) */ 181248571Smm uint64_t zc_history_len; 182248571Smm uint64_t zc_history_offset; 183248571Smm uint64_t zc_obj; 184248571Smm uint64_t zc_iflags; /* internal to zfs(7fs) */ 185248571Smm zfs_share_t zc_share; 186248571Smm uint64_t zc_jailid; 187248571Smm dmu_objset_stats_t zc_objset_stats; 188248571Smm struct drr_begin zc_begin_record; 189248571Smm /* zc_inject_record doesn't change in libzfs_core */ 190248571Smm zinject_record_t zc_inject_record; 191248571Smm boolean_t zc_defer_destroy; 192248571Smm boolean_t zc_temphold; 193248571Smm uint64_t zc_action_handle; 194248571Smm int zc_cleanup_fd; 195248571Smm uint8_t zc_simple; 196248571Smm uint8_t zc_pad[3]; /* alignment */ 197248571Smm uint64_t zc_sendobj; 198248571Smm uint64_t zc_fromobj; 199248571Smm uint64_t zc_createtxg; 200248571Smm zfs_stat_t zc_stat; 201248571Smm} zfs_cmd_deadman_t; 202248571Smm 203219089Spjd#ifdef _KERNEL 204219089Spjdunsigned static long zfs_ioctl_v15_to_v28[] = { 205219089Spjd 0, /* 0 ZFS_IOC_POOL_CREATE */ 206219089Spjd 1, /* 1 ZFS_IOC_POOL_DESTROY */ 207219089Spjd 2, /* 2 ZFS_IOC_POOL_IMPORT */ 208219089Spjd 3, /* 3 ZFS_IOC_POOL_EXPORT */ 209219089Spjd 4, /* 4 ZFS_IOC_POOL_CONFIGS */ 210219089Spjd 5, /* 5 ZFS_IOC_POOL_STATS */ 211219089Spjd 6, /* 6 ZFS_IOC_POOL_TRYIMPORT */ 212219089Spjd 7, /* 7 ZFS_IOC_POOL_SCRUB */ 213219089Spjd 8, /* 8 ZFS_IOC_POOL_FREEZE */ 214219089Spjd 9, /* 9 ZFS_IOC_POOL_UPGRADE */ 215219089Spjd 10, /* 10 ZFS_IOC_POOL_GET_HISTORY */ 216219089Spjd 11, /* 11 ZFS_IOC_VDEV_ADD */ 217219089Spjd 12, /* 12 ZFS_IOC_VDEV_REMOVE */ 218219089Spjd 13, /* 13 ZFS_IOC_VDEV_SET_STATE */ 219219089Spjd 14, /* 14 ZFS_IOC_VDEV_ATTACH */ 220219089Spjd 15, /* 15 ZFS_IOC_VDEV_DETACH */ 221219089Spjd 16, /* 16 ZFS_IOC_VDEV_SETPATH */ 222219089Spjd 18, /* 17 ZFS_IOC_OBJSET_STATS */ 223219089Spjd 19, /* 18 ZFS_IOC_OBJSET_ZPLPROPS */ 224219089Spjd 20, /* 19 ZFS_IOC_DATASET_LIST_NEXT */ 225219089Spjd 21, /* 20 ZFS_IOC_SNAPSHOT_LIST_NEXT */ 226219089Spjd 22, /* 21 ZFS_IOC_SET_PROP */ 227219089Spjd ZFS_IOC_COMPAT_PASS, /* 22 ZFS_IOC_CREATE_MINOR */ 228219089Spjd ZFS_IOC_COMPAT_PASS, /* 23 ZFS_IOC_REMOVE_MINOR */ 229219089Spjd 23, /* 24 ZFS_IOC_CREATE */ 230219089Spjd 24, /* 25 ZFS_IOC_DESTROY */ 231219089Spjd 25, /* 26 ZFS_IOC_ROLLBACK */ 232219089Spjd 26, /* 27 ZFS_IOC_RENAME */ 233219089Spjd 27, /* 28 ZFS_IOC_RECV */ 234219089Spjd 28, /* 29 ZFS_IOC_SEND */ 235219089Spjd 29, /* 30 ZFS_IOC_INJECT_FAULT */ 236219089Spjd 30, /* 31 ZFS_IOC_CLEAR_FAULT */ 237219089Spjd 31, /* 32 ZFS_IOC_INJECT_LIST_NEXT */ 238219089Spjd 32, /* 33 ZFS_IOC_ERROR_LOG */ 239219089Spjd 33, /* 34 ZFS_IOC_CLEAR */ 240219089Spjd 34, /* 35 ZFS_IOC_PROMOTE */ 241219089Spjd 35, /* 36 ZFS_IOC_DESTROY_SNAPS */ 242219089Spjd 36, /* 37 ZFS_IOC_SNAPSHOT */ 243219089Spjd 37, /* 38 ZFS_IOC_DSOBJ_TO_DSNAME */ 244219089Spjd 38, /* 39 ZFS_IOC_OBJ_TO_PATH */ 245219089Spjd 39, /* 40 ZFS_IOC_POOL_SET_PROPS */ 246219089Spjd 40, /* 41 ZFS_IOC_POOL_GET_PROPS */ 247219089Spjd 41, /* 42 ZFS_IOC_SET_FSACL */ 248219089Spjd 42, /* 43 ZFS_IOC_GET_FSACL */ 249219089Spjd ZFS_IOC_COMPAT_PASS, /* 44 ZFS_IOC_ISCSI_PERM_CHECK */ 250219089Spjd 43, /* 45 ZFS_IOC_SHARE */ 251219089Spjd 44, /* 46 ZFS_IOC_IHNERIT_PROP */ 252219089Spjd 58, /* 47 ZFS_IOC_JAIL */ 253219089Spjd 59, /* 48 ZFS_IOC_UNJAIL */ 254219089Spjd 45, /* 49 ZFS_IOC_SMB_ACL */ 255219089Spjd 46, /* 50 ZFS_IOC_USERSPACE_ONE */ 256219089Spjd 47, /* 51 ZFS_IOC_USERSPACE_MANY */ 257219089Spjd 48, /* 52 ZFS_IOC_USERSPACE_UPGRADE */ 258219089Spjd 17, /* 53 ZFS_IOC_SETFRU */ 259219089Spjd}; 260219089Spjd 261219089Spjd#else /* KERNEL */ 262219089Spjdunsigned static long zfs_ioctl_v28_to_v15[] = { 263219089Spjd 0, /* 0 ZFS_IOC_POOL_CREATE */ 264219089Spjd 1, /* 1 ZFS_IOC_POOL_DESTROY */ 265219089Spjd 2, /* 2 ZFS_IOC_POOL_IMPORT */ 266219089Spjd 3, /* 3 ZFS_IOC_POOL_EXPORT */ 267219089Spjd 4, /* 4 ZFS_IOC_POOL_CONFIGS */ 268219089Spjd 5, /* 5 ZFS_IOC_POOL_STATS */ 269219089Spjd 6, /* 6 ZFS_IOC_POOL_TRYIMPORT */ 270219089Spjd 7, /* 7 ZFS_IOC_POOL_SCAN */ 271219089Spjd 8, /* 8 ZFS_IOC_POOL_FREEZE */ 272219089Spjd 9, /* 9 ZFS_IOC_POOL_UPGRADE */ 273219089Spjd 10, /* 10 ZFS_IOC_POOL_GET_HISTORY */ 274219089Spjd 11, /* 11 ZFS_IOC_VDEV_ADD */ 275219089Spjd 12, /* 12 ZFS_IOC_VDEV_REMOVE */ 276219089Spjd 13, /* 13 ZFS_IOC_VDEV_SET_STATE */ 277219089Spjd 14, /* 14 ZFS_IOC_VDEV_ATTACH */ 278219089Spjd 15, /* 15 ZFS_IOC_VDEV_DETACH */ 279219089Spjd 16, /* 16 ZFS_IOC_VDEV_SETPATH */ 280219089Spjd 53, /* 17 ZFS_IOC_VDEV_SETFRU */ 281219089Spjd 17, /* 18 ZFS_IOC_OBJSET_STATS */ 282219089Spjd 18, /* 19 ZFS_IOC_OBJSET_ZPLPROPS */ 283219089Spjd 19, /* 20 ZFS_IOC_DATASET_LIST_NEXT */ 284219089Spjd 20, /* 21 ZFS_IOC_SNAPSHOT_LIST_NEXT */ 285219089Spjd 21, /* 22 ZFS_IOC_SET_PROP */ 286219089Spjd 24, /* 23 ZFS_IOC_CREATE */ 287219089Spjd 25, /* 24 ZFS_IOC_DESTROY */ 288219089Spjd 26, /* 25 ZFS_IOC_ROLLBACK */ 289219089Spjd 27, /* 26 ZFS_IOC_RENAME */ 290219089Spjd 28, /* 27 ZFS_IOC_RECV */ 291219089Spjd 29, /* 28 ZFS_IOC_SEND */ 292219089Spjd 30, /* 39 ZFS_IOC_INJECT_FAULT */ 293219089Spjd 31, /* 30 ZFS_IOC_CLEAR_FAULT */ 294219089Spjd 32, /* 31 ZFS_IOC_INJECT_LIST_NEXT */ 295219089Spjd 33, /* 32 ZFS_IOC_ERROR_LOG */ 296219089Spjd 34, /* 33 ZFS_IOC_CLEAR */ 297219089Spjd 35, /* 34 ZFS_IOC_PROMOTE */ 298219089Spjd 36, /* 35 ZFS_IOC_DESTROY_SNAPS */ 299219089Spjd 37, /* 36 ZFS_IOC_SNAPSHOT */ 300219089Spjd 38, /* 37 ZFS_IOC_DSOBJ_TO_DSNAME */ 301219089Spjd 39, /* 38 ZFS_IOC_OBJ_TO_PATH */ 302219089Spjd 40, /* 39 ZFS_IOC_POOL_SET_PROPS */ 303219089Spjd 41, /* 40 ZFS_IOC_POOL_GET_PROPS */ 304219089Spjd 42, /* 41 ZFS_IOC_SET_FSACL */ 305219089Spjd 43, /* 42 ZFS_IOC_GET_FSACL */ 306219089Spjd 45, /* 43 ZFS_IOC_SHARE */ 307219089Spjd 46, /* 44 ZFS_IOC_IHNERIT_PROP */ 308219089Spjd 49, /* 45 ZFS_IOC_SMB_ACL */ 309219089Spjd 50, /* 46 ZFS_IOC_USERSPACE_ONE */ 310219089Spjd 51, /* 47 ZFS_IOC_USERSPACE_MANY */ 311219089Spjd 52, /* 48 ZFS_IOC_USERSPACE_UPGRADE */ 312219089Spjd ZFS_IOC_COMPAT_FAIL, /* 49 ZFS_IOC_HOLD */ 313219089Spjd ZFS_IOC_COMPAT_FAIL, /* 50 ZFS_IOC_RELEASE */ 314219089Spjd ZFS_IOC_COMPAT_FAIL, /* 51 ZFS_IOC_GET_HOLDS */ 315219089Spjd ZFS_IOC_COMPAT_FAIL, /* 52 ZFS_IOC_OBJSET_RECVD_PROPS */ 316219089Spjd ZFS_IOC_COMPAT_FAIL, /* 53 ZFS_IOC_VDEV_SPLIT */ 317219089Spjd ZFS_IOC_COMPAT_FAIL, /* 54 ZFS_IOC_NEXT_OBJ */ 318219089Spjd ZFS_IOC_COMPAT_FAIL, /* 55 ZFS_IOC_DIFF */ 319219089Spjd ZFS_IOC_COMPAT_FAIL, /* 56 ZFS_IOC_TMP_SNAPSHOT */ 320219089Spjd ZFS_IOC_COMPAT_FAIL, /* 57 ZFS_IOC_OBJ_TO_STATS */ 321219089Spjd 47, /* 58 ZFS_IOC_JAIL */ 322219089Spjd 48, /* 59 ZFS_IOC_UNJAIL */ 323219089Spjd}; 324219089Spjd#endif /* ! _KERNEL */ 325219089Spjd 326219089Spjd#ifdef _KERNEL 327248571Smmint zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int); 328219089Spjdvoid zfs_ioctl_compat_post(zfs_cmd_t *, const int, const int); 329248571Smmnvlist_t *zfs_ioctl_compat_innvl(zfs_cmd_t *, nvlist_t *, const int, 330248571Smm const int); 331248571Smmnvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int, 332248571Smm const int); 333219089Spjd#else 334248571Smmint zcmd_ioctl_compat(int, int, zfs_cmd_t *, const int); 335219089Spjd#endif /* _KERNEL */ 336219089Spjdvoid zfs_cmd_compat_get(zfs_cmd_t *, caddr_t, const int); 337248571Smmvoid zfs_cmd_compat_put(zfs_cmd_t *, caddr_t, const int, const int); 338219089Spjd 339219089Spjd#ifdef __cplusplus 340219089Spjd} 341219089Spjd#endif 342219089Spjd 343219089Spjd#endif /* _SYS_ZFS_IOCTL_COMPAT_H */ 344