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