zfs_ioctl_compat.h revision 248571
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 52248571Smm#define ZFS_IOCVER_CURRENT ZFS_IOCVER_LZC 53247540Smm 54247540Smm/* compatibility conversion flag */ 55247540Smm#define ZFS_CMD_COMPAT_NONE 0 56219089Spjd#define ZFS_CMD_COMPAT_V15 1 57247540Smm#define ZFS_CMD_COMPAT_V28 2 58248571Smm#define ZFS_CMD_COMPAT_DEADMAN 3 59219089Spjd 60247540Smm#define ZFS_IOC_COMPAT_PASS 254 61247540Smm#define ZFS_IOC_COMPAT_FAIL 255 62219089Spjd 63248571Smm#define ZFS_IOCREQ(ioreq) ((ioreq) & 0xff) 64248571Smm 65219089Spjdtypedef struct zinject_record_v15 { 66219089Spjd uint64_t zi_objset; 67219089Spjd uint64_t zi_object; 68219089Spjd uint64_t zi_start; 69219089Spjd uint64_t zi_end; 70219089Spjd uint64_t zi_guid; 71219089Spjd uint32_t zi_level; 72219089Spjd uint32_t zi_error; 73219089Spjd uint64_t zi_type; 74219089Spjd uint32_t zi_freq; 75219089Spjd uint32_t zi_failfast; 76219089Spjd} zinject_record_v15_t; 77219089Spjd 78219089Spjdtypedef struct zfs_cmd_v15 { 79219089Spjd char zc_name[MAXPATHLEN]; 80219089Spjd char zc_value[MAXPATHLEN]; 81219089Spjd char zc_string[MAXNAMELEN]; 82219089Spjd uint64_t zc_guid; 83219089Spjd uint64_t zc_nvlist_conf; /* really (char *) */ 84219089Spjd uint64_t zc_nvlist_conf_size; 85219089Spjd uint64_t zc_nvlist_src; /* really (char *) */ 86219089Spjd uint64_t zc_nvlist_src_size; 87219089Spjd uint64_t zc_nvlist_dst; /* really (char *) */ 88219089Spjd uint64_t zc_nvlist_dst_size; 89219089Spjd uint64_t zc_cookie; 90219089Spjd uint64_t zc_objset_type; 91219089Spjd uint64_t zc_perm_action; 92219089Spjd uint64_t zc_history; /* really (char *) */ 93219089Spjd uint64_t zc_history_len; 94219089Spjd uint64_t zc_history_offset; 95219089Spjd uint64_t zc_obj; 96219089Spjd zfs_share_t zc_share; 97219089Spjd uint64_t zc_jailid; 98219089Spjd dmu_objset_stats_t zc_objset_stats; 99219089Spjd struct drr_begin zc_begin_record; 100219089Spjd zinject_record_v15_t zc_inject_record; 101219089Spjd} zfs_cmd_v15_t; 102219089Spjd 103247540Smmtypedef struct zinject_record_v28 { 104247540Smm uint64_t zi_objset; 105247540Smm uint64_t zi_object; 106247540Smm uint64_t zi_start; 107247540Smm uint64_t zi_end; 108247540Smm uint64_t zi_guid; 109247540Smm uint32_t zi_level; 110247540Smm uint32_t zi_error; 111247540Smm uint64_t zi_type; 112247540Smm uint32_t zi_freq; 113247540Smm uint32_t zi_failfast; 114247540Smm char zi_func[MAXNAMELEN]; 115247540Smm uint32_t zi_iotype; 116247540Smm int32_t zi_duration; 117247540Smm uint64_t zi_timer; 118247540Smm} zinject_record_v28_t; 119247540Smm 120247540Smmtypedef struct zfs_cmd_v28 { 121247540Smm char zc_name[MAXPATHLEN]; 122247540Smm char zc_value[MAXPATHLEN * 2]; 123247540Smm char zc_string[MAXNAMELEN]; 124247540Smm char zc_top_ds[MAXPATHLEN]; 125247540Smm uint64_t zc_guid; 126247540Smm uint64_t zc_nvlist_conf; /* really (char *) */ 127247540Smm uint64_t zc_nvlist_conf_size; 128247540Smm uint64_t zc_nvlist_src; /* really (char *) */ 129247540Smm uint64_t zc_nvlist_src_size; 130247540Smm uint64_t zc_nvlist_dst; /* really (char *) */ 131247540Smm uint64_t zc_nvlist_dst_size; 132247540Smm uint64_t zc_cookie; 133247540Smm uint64_t zc_objset_type; 134247540Smm uint64_t zc_perm_action; 135247540Smm uint64_t zc_history; /* really (char *) */ 136247540Smm uint64_t zc_history_len; 137247540Smm uint64_t zc_history_offset; 138247540Smm uint64_t zc_obj; 139247540Smm uint64_t zc_iflags; /* internal to zfs(7fs) */ 140247540Smm zfs_share_t zc_share; 141247540Smm uint64_t zc_jailid; 142247540Smm dmu_objset_stats_t zc_objset_stats; 143247540Smm struct drr_begin zc_begin_record; 144247540Smm zinject_record_v28_t zc_inject_record; 145247540Smm boolean_t zc_defer_destroy; 146247540Smm boolean_t zc_temphold; 147247540Smm uint64_t zc_action_handle; 148247540Smm int zc_cleanup_fd; 149247540Smm uint8_t zc_simple; 150247540Smm uint8_t zc_pad[3]; /* alignment */ 151247540Smm uint64_t zc_sendobj; 152247540Smm uint64_t zc_fromobj; 153247540Smm uint64_t zc_createtxg; 154247540Smm zfs_stat_t zc_stat; 155247540Smm} zfs_cmd_v28_t; 156247540Smm 157248571Smmtypedef struct zfs_cmd_deadman { 158248571Smm char zc_name[MAXPATHLEN]; 159248571Smm char zc_value[MAXPATHLEN * 2]; 160248571Smm char zc_string[MAXNAMELEN]; 161248571Smm char zc_top_ds[MAXPATHLEN]; 162248571Smm uint64_t zc_guid; 163248571Smm uint64_t zc_nvlist_conf; /* really (char *) */ 164248571Smm uint64_t zc_nvlist_conf_size; 165248571Smm uint64_t zc_nvlist_src; /* really (char *) */ 166248571Smm uint64_t zc_nvlist_src_size; 167248571Smm uint64_t zc_nvlist_dst; /* really (char *) */ 168248571Smm uint64_t zc_nvlist_dst_size; 169248571Smm uint64_t zc_cookie; 170248571Smm uint64_t zc_objset_type; 171248571Smm uint64_t zc_perm_action; 172248571Smm uint64_t zc_history; /* really (char *) */ 173248571Smm uint64_t zc_history_len; 174248571Smm uint64_t zc_history_offset; 175248571Smm uint64_t zc_obj; 176248571Smm uint64_t zc_iflags; /* internal to zfs(7fs) */ 177248571Smm zfs_share_t zc_share; 178248571Smm uint64_t zc_jailid; 179248571Smm dmu_objset_stats_t zc_objset_stats; 180248571Smm struct drr_begin zc_begin_record; 181248571Smm /* zc_inject_record doesn't change in libzfs_core */ 182248571Smm zinject_record_t zc_inject_record; 183248571Smm boolean_t zc_defer_destroy; 184248571Smm boolean_t zc_temphold; 185248571Smm uint64_t zc_action_handle; 186248571Smm int zc_cleanup_fd; 187248571Smm uint8_t zc_simple; 188248571Smm uint8_t zc_pad[3]; /* alignment */ 189248571Smm uint64_t zc_sendobj; 190248571Smm uint64_t zc_fromobj; 191248571Smm uint64_t zc_createtxg; 192248571Smm zfs_stat_t zc_stat; 193248571Smm} zfs_cmd_deadman_t; 194248571Smm 195219089Spjd#ifdef _KERNEL 196219089Spjdunsigned static long zfs_ioctl_v15_to_v28[] = { 197219089Spjd 0, /* 0 ZFS_IOC_POOL_CREATE */ 198219089Spjd 1, /* 1 ZFS_IOC_POOL_DESTROY */ 199219089Spjd 2, /* 2 ZFS_IOC_POOL_IMPORT */ 200219089Spjd 3, /* 3 ZFS_IOC_POOL_EXPORT */ 201219089Spjd 4, /* 4 ZFS_IOC_POOL_CONFIGS */ 202219089Spjd 5, /* 5 ZFS_IOC_POOL_STATS */ 203219089Spjd 6, /* 6 ZFS_IOC_POOL_TRYIMPORT */ 204219089Spjd 7, /* 7 ZFS_IOC_POOL_SCRUB */ 205219089Spjd 8, /* 8 ZFS_IOC_POOL_FREEZE */ 206219089Spjd 9, /* 9 ZFS_IOC_POOL_UPGRADE */ 207219089Spjd 10, /* 10 ZFS_IOC_POOL_GET_HISTORY */ 208219089Spjd 11, /* 11 ZFS_IOC_VDEV_ADD */ 209219089Spjd 12, /* 12 ZFS_IOC_VDEV_REMOVE */ 210219089Spjd 13, /* 13 ZFS_IOC_VDEV_SET_STATE */ 211219089Spjd 14, /* 14 ZFS_IOC_VDEV_ATTACH */ 212219089Spjd 15, /* 15 ZFS_IOC_VDEV_DETACH */ 213219089Spjd 16, /* 16 ZFS_IOC_VDEV_SETPATH */ 214219089Spjd 18, /* 17 ZFS_IOC_OBJSET_STATS */ 215219089Spjd 19, /* 18 ZFS_IOC_OBJSET_ZPLPROPS */ 216219089Spjd 20, /* 19 ZFS_IOC_DATASET_LIST_NEXT */ 217219089Spjd 21, /* 20 ZFS_IOC_SNAPSHOT_LIST_NEXT */ 218219089Spjd 22, /* 21 ZFS_IOC_SET_PROP */ 219219089Spjd ZFS_IOC_COMPAT_PASS, /* 22 ZFS_IOC_CREATE_MINOR */ 220219089Spjd ZFS_IOC_COMPAT_PASS, /* 23 ZFS_IOC_REMOVE_MINOR */ 221219089Spjd 23, /* 24 ZFS_IOC_CREATE */ 222219089Spjd 24, /* 25 ZFS_IOC_DESTROY */ 223219089Spjd 25, /* 26 ZFS_IOC_ROLLBACK */ 224219089Spjd 26, /* 27 ZFS_IOC_RENAME */ 225219089Spjd 27, /* 28 ZFS_IOC_RECV */ 226219089Spjd 28, /* 29 ZFS_IOC_SEND */ 227219089Spjd 29, /* 30 ZFS_IOC_INJECT_FAULT */ 228219089Spjd 30, /* 31 ZFS_IOC_CLEAR_FAULT */ 229219089Spjd 31, /* 32 ZFS_IOC_INJECT_LIST_NEXT */ 230219089Spjd 32, /* 33 ZFS_IOC_ERROR_LOG */ 231219089Spjd 33, /* 34 ZFS_IOC_CLEAR */ 232219089Spjd 34, /* 35 ZFS_IOC_PROMOTE */ 233219089Spjd 35, /* 36 ZFS_IOC_DESTROY_SNAPS */ 234219089Spjd 36, /* 37 ZFS_IOC_SNAPSHOT */ 235219089Spjd 37, /* 38 ZFS_IOC_DSOBJ_TO_DSNAME */ 236219089Spjd 38, /* 39 ZFS_IOC_OBJ_TO_PATH */ 237219089Spjd 39, /* 40 ZFS_IOC_POOL_SET_PROPS */ 238219089Spjd 40, /* 41 ZFS_IOC_POOL_GET_PROPS */ 239219089Spjd 41, /* 42 ZFS_IOC_SET_FSACL */ 240219089Spjd 42, /* 43 ZFS_IOC_GET_FSACL */ 241219089Spjd ZFS_IOC_COMPAT_PASS, /* 44 ZFS_IOC_ISCSI_PERM_CHECK */ 242219089Spjd 43, /* 45 ZFS_IOC_SHARE */ 243219089Spjd 44, /* 46 ZFS_IOC_IHNERIT_PROP */ 244219089Spjd 58, /* 47 ZFS_IOC_JAIL */ 245219089Spjd 59, /* 48 ZFS_IOC_UNJAIL */ 246219089Spjd 45, /* 49 ZFS_IOC_SMB_ACL */ 247219089Spjd 46, /* 50 ZFS_IOC_USERSPACE_ONE */ 248219089Spjd 47, /* 51 ZFS_IOC_USERSPACE_MANY */ 249219089Spjd 48, /* 52 ZFS_IOC_USERSPACE_UPGRADE */ 250219089Spjd 17, /* 53 ZFS_IOC_SETFRU */ 251219089Spjd}; 252219089Spjd 253219089Spjd#else /* KERNEL */ 254219089Spjdunsigned static long zfs_ioctl_v28_to_v15[] = { 255219089Spjd 0, /* 0 ZFS_IOC_POOL_CREATE */ 256219089Spjd 1, /* 1 ZFS_IOC_POOL_DESTROY */ 257219089Spjd 2, /* 2 ZFS_IOC_POOL_IMPORT */ 258219089Spjd 3, /* 3 ZFS_IOC_POOL_EXPORT */ 259219089Spjd 4, /* 4 ZFS_IOC_POOL_CONFIGS */ 260219089Spjd 5, /* 5 ZFS_IOC_POOL_STATS */ 261219089Spjd 6, /* 6 ZFS_IOC_POOL_TRYIMPORT */ 262219089Spjd 7, /* 7 ZFS_IOC_POOL_SCAN */ 263219089Spjd 8, /* 8 ZFS_IOC_POOL_FREEZE */ 264219089Spjd 9, /* 9 ZFS_IOC_POOL_UPGRADE */ 265219089Spjd 10, /* 10 ZFS_IOC_POOL_GET_HISTORY */ 266219089Spjd 11, /* 11 ZFS_IOC_VDEV_ADD */ 267219089Spjd 12, /* 12 ZFS_IOC_VDEV_REMOVE */ 268219089Spjd 13, /* 13 ZFS_IOC_VDEV_SET_STATE */ 269219089Spjd 14, /* 14 ZFS_IOC_VDEV_ATTACH */ 270219089Spjd 15, /* 15 ZFS_IOC_VDEV_DETACH */ 271219089Spjd 16, /* 16 ZFS_IOC_VDEV_SETPATH */ 272219089Spjd 53, /* 17 ZFS_IOC_VDEV_SETFRU */ 273219089Spjd 17, /* 18 ZFS_IOC_OBJSET_STATS */ 274219089Spjd 18, /* 19 ZFS_IOC_OBJSET_ZPLPROPS */ 275219089Spjd 19, /* 20 ZFS_IOC_DATASET_LIST_NEXT */ 276219089Spjd 20, /* 21 ZFS_IOC_SNAPSHOT_LIST_NEXT */ 277219089Spjd 21, /* 22 ZFS_IOC_SET_PROP */ 278219089Spjd 24, /* 23 ZFS_IOC_CREATE */ 279219089Spjd 25, /* 24 ZFS_IOC_DESTROY */ 280219089Spjd 26, /* 25 ZFS_IOC_ROLLBACK */ 281219089Spjd 27, /* 26 ZFS_IOC_RENAME */ 282219089Spjd 28, /* 27 ZFS_IOC_RECV */ 283219089Spjd 29, /* 28 ZFS_IOC_SEND */ 284219089Spjd 30, /* 39 ZFS_IOC_INJECT_FAULT */ 285219089Spjd 31, /* 30 ZFS_IOC_CLEAR_FAULT */ 286219089Spjd 32, /* 31 ZFS_IOC_INJECT_LIST_NEXT */ 287219089Spjd 33, /* 32 ZFS_IOC_ERROR_LOG */ 288219089Spjd 34, /* 33 ZFS_IOC_CLEAR */ 289219089Spjd 35, /* 34 ZFS_IOC_PROMOTE */ 290219089Spjd 36, /* 35 ZFS_IOC_DESTROY_SNAPS */ 291219089Spjd 37, /* 36 ZFS_IOC_SNAPSHOT */ 292219089Spjd 38, /* 37 ZFS_IOC_DSOBJ_TO_DSNAME */ 293219089Spjd 39, /* 38 ZFS_IOC_OBJ_TO_PATH */ 294219089Spjd 40, /* 39 ZFS_IOC_POOL_SET_PROPS */ 295219089Spjd 41, /* 40 ZFS_IOC_POOL_GET_PROPS */ 296219089Spjd 42, /* 41 ZFS_IOC_SET_FSACL */ 297219089Spjd 43, /* 42 ZFS_IOC_GET_FSACL */ 298219089Spjd 45, /* 43 ZFS_IOC_SHARE */ 299219089Spjd 46, /* 44 ZFS_IOC_IHNERIT_PROP */ 300219089Spjd 49, /* 45 ZFS_IOC_SMB_ACL */ 301219089Spjd 50, /* 46 ZFS_IOC_USERSPACE_ONE */ 302219089Spjd 51, /* 47 ZFS_IOC_USERSPACE_MANY */ 303219089Spjd 52, /* 48 ZFS_IOC_USERSPACE_UPGRADE */ 304219089Spjd ZFS_IOC_COMPAT_FAIL, /* 49 ZFS_IOC_HOLD */ 305219089Spjd ZFS_IOC_COMPAT_FAIL, /* 50 ZFS_IOC_RELEASE */ 306219089Spjd ZFS_IOC_COMPAT_FAIL, /* 51 ZFS_IOC_GET_HOLDS */ 307219089Spjd ZFS_IOC_COMPAT_FAIL, /* 52 ZFS_IOC_OBJSET_RECVD_PROPS */ 308219089Spjd ZFS_IOC_COMPAT_FAIL, /* 53 ZFS_IOC_VDEV_SPLIT */ 309219089Spjd ZFS_IOC_COMPAT_FAIL, /* 54 ZFS_IOC_NEXT_OBJ */ 310219089Spjd ZFS_IOC_COMPAT_FAIL, /* 55 ZFS_IOC_DIFF */ 311219089Spjd ZFS_IOC_COMPAT_FAIL, /* 56 ZFS_IOC_TMP_SNAPSHOT */ 312219089Spjd ZFS_IOC_COMPAT_FAIL, /* 57 ZFS_IOC_OBJ_TO_STATS */ 313219089Spjd 47, /* 58 ZFS_IOC_JAIL */ 314219089Spjd 48, /* 59 ZFS_IOC_UNJAIL */ 315219089Spjd}; 316219089Spjd#endif /* ! _KERNEL */ 317219089Spjd 318219089Spjd#ifdef _KERNEL 319248571Smmint zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int); 320219089Spjdvoid zfs_ioctl_compat_post(zfs_cmd_t *, const int, const int); 321248571Smmnvlist_t *zfs_ioctl_compat_innvl(zfs_cmd_t *, nvlist_t *, const int, 322248571Smm const int); 323248571Smmnvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int, 324248571Smm const int); 325219089Spjd#else 326248571Smmint zcmd_ioctl_compat(int, int, zfs_cmd_t *, const int); 327219089Spjd#endif /* _KERNEL */ 328219089Spjdvoid zfs_cmd_compat_get(zfs_cmd_t *, caddr_t, const int); 329248571Smmvoid zfs_cmd_compat_put(zfs_cmd_t *, caddr_t, const int, const int); 330219089Spjd 331219089Spjd#ifdef __cplusplus 332219089Spjd} 333219089Spjd#endif 334219089Spjd 335219089Spjd#endif /* _SYS_ZFS_IOCTL_COMPAT_H */ 336