1/* $NetBSD: netbsd-dm.h,v 1.10 2019/12/06 16:46:14 tkusumi 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_IOCTL 0xfd 39 40#define DM_IOCTL_CMD 0 41 42#define NETBSD_DM_IOCTL _IOWR(DM_IOCTL, DM_IOCTL_CMD, struct plistref) 43 44 45/* 46 * DM-ioctl dictionary. 47 * 48 * This contains general information about dm device. 49 * 50 * <dict> 51 * <key>command</key> 52 * <string>...</string> 53 * 54 * <key>event_nr</key> 55 * <integer>...</integer> 56 * 57 * <key>name</key> 58 * <string>...</string> 59 * 60 * <key>uuid</key> 61 * <string>...</string> 62 * 63 * <key>dev</key> 64 * <integer></integer> 65 * 66 * <key>flags</key> 67 * <integer></integer> 68 * 69 * <key>version</key> 70 * <array> 71 * <integer>...</integer> 72 * <integer>...</integer> 73 * <integer>...</integer> 74 * </array> 75 * 76 * <key>cmd_data</key> 77 * <array> 78 * <!-- See below for command 79 * specific dictionaries --> 80 * </array> 81 * </dict> 82 * 83 * Available commands from _cmd_data_v4. 84 * 85 * create, reload, remove, remove_all, suspend, 86 * resume, info, deps, rename, version, status, 87 * table, waitevent, names, clear, mknodes, 88 * targets, message, setgeometry 89 * 90 */ 91 92/* 93 * DM_LIST_VERSIONS == "targets" command dictionary entry. 94 * Lists all available targets with their version. 95 * 96 * <array> 97 * <dict> 98 * <key>name<key> 99 * <string>...</string> 100 * 101 * <key>version</key> 102 * <array> 103 * <integer>...</integer> 104 * <integer>...</integer> 105 * <integer>...</integer> 106 * </array> 107 * </dict> 108 * </array> 109 * 110 */ 111 112/* 113 * DM_DEV_LIST == "names" 114 * Request list of device-mapper created devices from kernel. 115 * 116 * <array> 117 * <dict> 118 * <key>name<key> 119 * <string>...</string> 120 * 121 * <key>dev</key> 122 * <integer>...</integer> 123 * </dict> 124 * </array> 125 * 126 * dev is uint64_t 127 * 128 */ 129 130 /* 131 * DM_DEV_RENAME == "rename" 132 * Rename device to string. 133 * 134 * <array> 135 * <string>...</string> 136 * </array> 137 * 138 */ 139 140 /* 141 * DM_DEV_STATUS == "info, mknodes" 142 * Will change fields DM_IOCTL_OPEN, DM_IOCTL_DEV in received dictionary, 143 * with dm device values with name or uuid from list. 144 * 145 */ 146 147 /* 148 * DM_TABLE_STATUS == "status,table" 149 * Request list of device-mapper created devices from kernel. 150 * 151 * <array> 152 * <dict> 153 * <key>type<key> 154 * <string>...</string> 155 * 156 * <key>start</key> 157 * <integer>...</integer> 158 * 159 * <key>length</key> 160 * <integer>...</integer> 161 * 162 * <key>params</key> 163 * <string>...</string> 164 * </dict> 165 * </array> 166 * 167 * params is string which contains {device} {parameters} 168 * 169 */ 170 171 /* 172 * DM_TABLE_DEPS == "deps" 173 * Request list active table device dependencies. 174 * 175 * This command is also run to get dm-device 176 * dependencies for existing real block device. 177 * 178 * eg. vgcreate calls DM_TABLE_DEPS 179 * 180 * <array> 181 * <integer>...</integer> 182 * </array> 183 * 184 */ 185 186 187#define DM_IOCTL_COMMAND "command" 188#define DM_IOCTL_VERSION "version" 189#define DM_IOCTL_OPEN "open_count" 190#define DM_IOCTL_MINOR "minor" 191#define DM_IOCTL_NAME "name" 192#define DM_IOCTL_UUID "uuid" 193#define DM_IOCTL_TARGET_COUNT "target_count" 194#define DM_IOCTL_EVENT "event_nr" 195#define DM_IOCTL_FLAGS "flags" 196#define DM_IOCTL_CMD_DATA "cmd_data" 197 198#define DM_TARGETS_NAME "name" 199#define DM_TARGETS_VERSION "ver" 200 201#define DM_DEV_NEWNAME "newname" 202#define DM_DEV_NAME "name" 203#define DM_DEV_DEV "dev" 204 205#define DM_TABLE_TYPE "type" 206#define DM_TABLE_START "start" 207#define DM_TABLE_STAT "status" 208#define DM_TABLE_LENGTH "length" 209#define DM_TABLE_PARAMS "params" 210//#ifndef __LIB_DEVMAPPER__ 211//#define DM_TABLE_DEPS "deps" 212//#endif 213 214/* Status bits */ 215/* IO mode of device */ 216#define DM_READONLY_FLAG (1 << 0) /* In/Out *//* to kernel/from kernel */ 217#define DM_SUSPEND_FLAG (1 << 1) /* In/Out */ 218/* XXX. This flag is undocumented. */ 219#define DM_EXISTS_FLAG (1 << 2) /* In/Out */ 220/* Minor number is persistent */ 221#define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */ 222 223/* 224 * Flag passed into ioctl STATUS command to get table information 225 * rather than current status. 226 */ 227#define DM_STATUS_TABLE_FLAG (1 << 4) /* In */ 228 229/* 230 * Flags that indicate whether a table is present in either of 231 * the two table slots that a device has. 232 */ 233#define DM_ACTIVE_PRESENT_FLAG (1 << 5) /* Out */ 234#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */ 235 236/* 237 * Indicates that the buffer passed in wasn't big enough for the 238 * results. 239 */ 240#define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ 241 242/* 243 * This flag is now ignored. 244 */ 245#define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ 246 247/* 248 * Set this to avoid attempting to freeze any filesystem when suspending. 249 */ 250#define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */ 251 252/* 253 * Set this to suspend without flushing queued ios. 254 */ 255#define DM_NOFLUSH_FLAG (1 << 11) /* In */ 256 257/* 258 * If set, any table information returned will relate to the inactive 259 * table instead of the live one. Always check DM_INACTIVE_PRESENT_FLAG 260 * is set before using the data returned. 261 */ 262#define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12) /* In */ 263 264#endif /* __NETBSD_DM_H__ */ 265