1*997f8393Stkusumi /* $NetBSD: netbsd-dm.h,v 1.10 2019/12/06 16:46:14 tkusumi Exp $ */ 2c9d0c62aShaad 3c9d0c62aShaad /* 4c9d0c62aShaad * Copyright (c) 2008 The NetBSD Foundation, Inc. 5c9d0c62aShaad * All rights reserved. 6c9d0c62aShaad * 7c9d0c62aShaad * This code is derived from software contributed to The NetBSD Foundation 8c9d0c62aShaad * by Adam Hamsik. 9c9d0c62aShaad * 10c9d0c62aShaad * Redistribution and use in source and binary forms, with or without 11c9d0c62aShaad * modification, are permitted provided that the following conditions 12c9d0c62aShaad * are met: 13c9d0c62aShaad * 1. Redistributions of source code must retain the above copyright 14c9d0c62aShaad * notice, this list of conditions and the following disclaimer. 15c9d0c62aShaad * 2. Redistributions in binary form must reproduce the above copyright 16c9d0c62aShaad * notice, this list of conditions and the following disclaimer in the 17c9d0c62aShaad * documentation and/or other materials provided with the distribution. 18c9d0c62aShaad * 19c9d0c62aShaad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20c9d0c62aShaad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21c9d0c62aShaad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22c9d0c62aShaad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23c9d0c62aShaad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24c9d0c62aShaad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25c9d0c62aShaad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26c9d0c62aShaad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27c9d0c62aShaad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28c9d0c62aShaad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29c9d0c62aShaad * POSSIBILITY OF SUCH DAMAGE. 30c9d0c62aShaad */ 31c9d0c62aShaad 32c9d0c62aShaad #ifndef __NETBSD_DM_H__ 33c9d0c62aShaad #define __NETBSD_DM_H__ 34c9d0c62aShaad 351fbab01aSdholland #include <sys/ioccom.h> 36c9d0c62aShaad #include <prop/proplib.h> 37c9d0c62aShaad 38c9d0c62aShaad #define DM_IOCTL 0xfd 39c9d0c62aShaad 40c9d0c62aShaad #define DM_IOCTL_CMD 0 41c9d0c62aShaad 42c9d0c62aShaad #define NETBSD_DM_IOCTL _IOWR(DM_IOCTL, DM_IOCTL_CMD, struct plistref) 43c9d0c62aShaad 44c9d0c62aShaad 45c9d0c62aShaad /* 46c9d0c62aShaad * DM-ioctl dictionary. 47c9d0c62aShaad * 48c9d0c62aShaad * This contains general information about dm device. 49c9d0c62aShaad * 50c9d0c62aShaad * <dict> 51c9d0c62aShaad * <key>command</key> 52c9d0c62aShaad * <string>...</string> 53c9d0c62aShaad * 54c9d0c62aShaad * <key>event_nr</key> 55c9d0c62aShaad * <integer>...</integer> 56c9d0c62aShaad * 57c9d0c62aShaad * <key>name</key> 58c9d0c62aShaad * <string>...</string> 59c9d0c62aShaad * 60c9d0c62aShaad * <key>uuid</key> 61c9d0c62aShaad * <string>...</string> 62c9d0c62aShaad * 63c9d0c62aShaad * <key>dev</key> 64c9d0c62aShaad * <integer></integer> 65c9d0c62aShaad * 66c9d0c62aShaad * <key>flags</key> 67c9d0c62aShaad * <integer></integer> 68c9d0c62aShaad * 69c9d0c62aShaad * <key>version</key> 70c9d0c62aShaad * <array> 71c9d0c62aShaad * <integer>...</integer> 72c9d0c62aShaad * <integer>...</integer> 73c9d0c62aShaad * <integer>...</integer> 74c9d0c62aShaad * </array> 75c9d0c62aShaad * 76c9d0c62aShaad * <key>cmd_data</key> 77c9d0c62aShaad * <array> 78c9d0c62aShaad * <!-- See below for command 79c9d0c62aShaad * specific dictionaries --> 80c9d0c62aShaad * </array> 81c9d0c62aShaad * </dict> 82c9d0c62aShaad * 83c9d0c62aShaad * Available commands from _cmd_data_v4. 84c9d0c62aShaad * 85c9d0c62aShaad * create, reload, remove, remove_all, suspend, 86c9d0c62aShaad * resume, info, deps, rename, version, status, 87c9d0c62aShaad * table, waitevent, names, clear, mknodes, 88c9d0c62aShaad * targets, message, setgeometry 89c9d0c62aShaad * 90c9d0c62aShaad */ 91c9d0c62aShaad 92c9d0c62aShaad /* 93c9d0c62aShaad * DM_LIST_VERSIONS == "targets" command dictionary entry. 94c9d0c62aShaad * Lists all available targets with their version. 95c9d0c62aShaad * 96c9d0c62aShaad * <array> 97c9d0c62aShaad * <dict> 98c9d0c62aShaad * <key>name<key> 99c9d0c62aShaad * <string>...</string> 100c9d0c62aShaad * 101c9d0c62aShaad * <key>version</key> 102c9d0c62aShaad * <array> 103c9d0c62aShaad * <integer>...</integer> 104c9d0c62aShaad * <integer>...</integer> 105c9d0c62aShaad * <integer>...</integer> 106c9d0c62aShaad * </array> 107c9d0c62aShaad * </dict> 108c9d0c62aShaad * </array> 109c9d0c62aShaad * 110c9d0c62aShaad */ 111c9d0c62aShaad 112c9d0c62aShaad /* 113c9d0c62aShaad * DM_DEV_LIST == "names" 114c9d0c62aShaad * Request list of device-mapper created devices from kernel. 115c9d0c62aShaad * 116c9d0c62aShaad * <array> 117c9d0c62aShaad * <dict> 118c9d0c62aShaad * <key>name<key> 119c9d0c62aShaad * <string>...</string> 120c9d0c62aShaad * 121c9d0c62aShaad * <key>dev</key> 122c9d0c62aShaad * <integer>...</integer> 123c9d0c62aShaad * </dict> 124c9d0c62aShaad * </array> 125c9d0c62aShaad * 126c9d0c62aShaad * dev is uint64_t 127c9d0c62aShaad * 128c9d0c62aShaad */ 129c9d0c62aShaad 130c9d0c62aShaad /* 131c9d0c62aShaad * DM_DEV_RENAME == "rename" 132c9d0c62aShaad * Rename device to string. 133c9d0c62aShaad * 134c9d0c62aShaad * <array> 135c9d0c62aShaad * <string>...</string> 136c9d0c62aShaad * </array> 137c9d0c62aShaad * 138c9d0c62aShaad */ 139c9d0c62aShaad 140c9d0c62aShaad /* 141c9d0c62aShaad * DM_DEV_STATUS == "info, mknodes" 142c9d0c62aShaad * Will change fields DM_IOCTL_OPEN, DM_IOCTL_DEV in received dictionary, 143c9d0c62aShaad * with dm device values with name or uuid from list. 144c9d0c62aShaad * 145c9d0c62aShaad */ 146c9d0c62aShaad 147c9d0c62aShaad /* 148c9d0c62aShaad * DM_TABLE_STATUS == "status,table" 149c9d0c62aShaad * Request list of device-mapper created devices from kernel. 150c9d0c62aShaad * 151c9d0c62aShaad * <array> 152c9d0c62aShaad * <dict> 153c9d0c62aShaad * <key>type<key> 154c9d0c62aShaad * <string>...</string> 155c9d0c62aShaad * 156c9d0c62aShaad * <key>start</key> 157c9d0c62aShaad * <integer>...</integer> 158c9d0c62aShaad * 159c9d0c62aShaad * <key>length</key> 160c9d0c62aShaad * <integer>...</integer> 161c9d0c62aShaad * 162c9d0c62aShaad * <key>params</key> 163c9d0c62aShaad * <string>...</string> 164c9d0c62aShaad * </dict> 165c9d0c62aShaad * </array> 166c9d0c62aShaad * 167c9d0c62aShaad * params is string which contains {device} {parameters} 168c9d0c62aShaad * 169c9d0c62aShaad */ 170c9d0c62aShaad 171c9d0c62aShaad /* 172c9d0c62aShaad * DM_TABLE_DEPS == "deps" 173c5df2cb7Smbalmer * Request list active table device dependencies. 174c9d0c62aShaad * 175c9d0c62aShaad * This command is also run to get dm-device 176c5df2cb7Smbalmer * dependencies for existing real block device. 177c9d0c62aShaad * 178c9d0c62aShaad * eg. vgcreate calls DM_TABLE_DEPS 179c9d0c62aShaad * 180c9d0c62aShaad * <array> 181c9d0c62aShaad * <integer>...</integer> 182c9d0c62aShaad * </array> 183c9d0c62aShaad * 184c9d0c62aShaad */ 185c9d0c62aShaad 1869401ff0bShaad 187c9d0c62aShaad #define DM_IOCTL_COMMAND "command" 188c9d0c62aShaad #define DM_IOCTL_VERSION "version" 189c9d0c62aShaad #define DM_IOCTL_OPEN "open_count" 190c9d0c62aShaad #define DM_IOCTL_MINOR "minor" 191c9d0c62aShaad #define DM_IOCTL_NAME "name" 192c9d0c62aShaad #define DM_IOCTL_UUID "uuid" 193c9d0c62aShaad #define DM_IOCTL_TARGET_COUNT "target_count" 194c9d0c62aShaad #define DM_IOCTL_EVENT "event_nr" 195c9d0c62aShaad #define DM_IOCTL_FLAGS "flags" 196c9d0c62aShaad #define DM_IOCTL_CMD_DATA "cmd_data" 197c9d0c62aShaad 198c9d0c62aShaad #define DM_TARGETS_NAME "name" 199c9d0c62aShaad #define DM_TARGETS_VERSION "ver" 200c9d0c62aShaad 201c9d0c62aShaad #define DM_DEV_NEWNAME "newname" 202c9d0c62aShaad #define DM_DEV_NAME "name" 203c9d0c62aShaad #define DM_DEV_DEV "dev" 204c9d0c62aShaad 205c9d0c62aShaad #define DM_TABLE_TYPE "type" 206c9d0c62aShaad #define DM_TABLE_START "start" 207c9d0c62aShaad #define DM_TABLE_STAT "status" 208c9d0c62aShaad #define DM_TABLE_LENGTH "length" 209c9d0c62aShaad #define DM_TABLE_PARAMS "params" 2109401ff0bShaad //#ifndef __LIB_DEVMAPPER__ 2119401ff0bShaad //#define DM_TABLE_DEPS "deps" 2129401ff0bShaad //#endif 213c9d0c62aShaad 214c9d0c62aShaad /* Status bits */ 215c9d0c62aShaad /* IO mode of device */ 216c9d0c62aShaad #define DM_READONLY_FLAG (1 << 0) /* In/Out *//* to kernel/from kernel */ 217c9d0c62aShaad #define DM_SUSPEND_FLAG (1 << 1) /* In/Out */ 218c9d0c62aShaad /* XXX. This flag is undocumented. */ 219c9d0c62aShaad #define DM_EXISTS_FLAG (1 << 2) /* In/Out */ 220c9d0c62aShaad /* Minor number is persistent */ 221c9d0c62aShaad #define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */ 222c9d0c62aShaad 223c9d0c62aShaad /* 224c9d0c62aShaad * Flag passed into ioctl STATUS command to get table information 225c9d0c62aShaad * rather than current status. 226c9d0c62aShaad */ 227c9d0c62aShaad #define DM_STATUS_TABLE_FLAG (1 << 4) /* In */ 228c9d0c62aShaad 229c9d0c62aShaad /* 230c9d0c62aShaad * Flags that indicate whether a table is present in either of 231c9d0c62aShaad * the two table slots that a device has. 232c9d0c62aShaad */ 233c9d0c62aShaad #define DM_ACTIVE_PRESENT_FLAG (1 << 5) /* Out */ 234c9d0c62aShaad #define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */ 235c9d0c62aShaad 236c9d0c62aShaad /* 237c9d0c62aShaad * Indicates that the buffer passed in wasn't big enough for the 238c9d0c62aShaad * results. 239c9d0c62aShaad */ 240c9d0c62aShaad #define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ 241c9d0c62aShaad 242c9d0c62aShaad /* 243c9d0c62aShaad * This flag is now ignored. 244c9d0c62aShaad */ 245c9d0c62aShaad #define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ 246c9d0c62aShaad 247c9d0c62aShaad /* 248c9d0c62aShaad * Set this to avoid attempting to freeze any filesystem when suspending. 249c9d0c62aShaad */ 250c9d0c62aShaad #define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */ 251c9d0c62aShaad 252c9d0c62aShaad /* 253c9d0c62aShaad * Set this to suspend without flushing queued ios. 254c9d0c62aShaad */ 255c9d0c62aShaad #define DM_NOFLUSH_FLAG (1 << 11) /* In */ 256c9d0c62aShaad 257bd8ee331Shaad /* 258bd8ee331Shaad * If set, any table information returned will relate to the inactive 259bd8ee331Shaad * table instead of the live one. Always check DM_INACTIVE_PRESENT_FLAG 260bd8ee331Shaad * is set before using the data returned. 261bd8ee331Shaad */ 262bd8ee331Shaad #define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12) /* In */ 263c9d0c62aShaad 264c9d0c62aShaad #endif /* __NETBSD_DM_H__ */ 265