unix: add dm-ioctl constants and types
This interface is used by devicemapper framework to manage its block
devices.
Change-Id: If86a679461867dac18b56bdf005567ffc4b7f951
Reviewed-on: https://go-review.googlesource.com/c/sys/+/247437
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/unix/linux/types.go b/unix/linux/types.go
index 7182a56..31a20c7 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -85,6 +85,7 @@
#include <linux/cgroupstats.h>
#include <linux/cryptouser.h>
#include <linux/devlink.h>
+#include <linux/dm-ioctl.h>
#include <linux/errqueue.h>
#include <linux/fanotify.h>
#include <linux/filter.h>
@@ -471,6 +472,25 @@
type FscryptGetKeyStatusArg C.struct_fscrypt_get_key_status_arg
+// Device Mapper
+
+type DmIoctl C.struct_dm_ioctl
+
+type DmTargetSpec C.struct_dm_target_spec
+
+type DmTargetDeps C.struct_dm_target_deps
+
+type DmNameList C.struct_dm_name_list
+
+type DmTargetVersions C.struct_dm_target_versions
+
+type DmTargetMsg C.struct_dm_target_msg
+
+const (
+ SizeofDmIoctl = C.sizeof_struct_dm_ioctl
+ SizeofDmTargetSpec = C.sizeof_struct_dm_target_spec
+)
+
// Structure for Keyctl
type KeyctlDHParams C.struct_keyctl_dh_params
diff --git a/unix/mkerrors.sh b/unix/mkerrors.sh
index 53a2493..40534f0 100755
--- a/unix/mkerrors.sh
+++ b/unix/mkerrors.sh
@@ -196,6 +196,7 @@
#include <linux/capability.h>
#include <linux/cryptouser.h>
#include <linux/devlink.h>
+#include <linux/dm-ioctl.h>
#include <linux/errqueue.h>
#include <linux/falloc.h>
#include <linux/fanotify.h>
@@ -517,6 +518,7 @@
$2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ ||
$2 ~ /^FS_VERITY_/ ||
$2 ~ /^FSCRYPT_/ ||
+ $2 ~ /^DM_/ ||
$2 ~ /^GRND_/ ||
$2 ~ /^RND/ ||
$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
diff --git a/unix/mkpost.go b/unix/mkpost.go
index 5ee1a16..e0e1b80 100644
--- a/unix/mkpost.go
+++ b/unix/mkpost.go
@@ -81,6 +81,15 @@
convertStatvfsRegex := regexp.MustCompile(`((Fstype|Mnton|Mntfrom)name)(\s+)\[(\d+)\]int8`)
b = convertStatvfsRegex.ReplaceAll(b, []byte("$1$3[$4]byte"))
+ // Convert []int8 to []byte in device mapper ioctl interface
+ convertDmIoctlNames := regexp.MustCompile(`(Name|Uuid|Target_type|Data)(\s+)\[(\d+)\]u?int8`)
+ dmIoctlTypes := regexp.MustCompile(`type Dm(\S+) struct {[^}]*}`)
+ dmStructs := dmIoctlTypes.FindAll(b, -1)
+ for _, s := range dmStructs {
+ newNames := convertDmIoctlNames.ReplaceAll(s, []byte("$1$2[$3]byte"))
+ b = bytes.Replace(b, s, newNames, 1)
+ }
+
// Convert [1024]int8 to [1024]byte in Ptmget members
convertPtmget := regexp.MustCompile(`([SC]n)(\s+)\[(\d+)\]u?int8`)
b = convertPtmget.ReplaceAll(b, []byte("$1[$3]byte"))
diff --git a/unix/zerrors_linux.go b/unix/zerrors_linux.go
index e5c4b5d..e80d4e9 100644
--- a/unix/zerrors_linux.go
+++ b/unix/zerrors_linux.go
@@ -377,6 +377,51 @@
DEVMEM_MAGIC = 0x454d444d
DEVPTS_SUPER_MAGIC = 0x1cd1
DMA_BUF_MAGIC = 0x444d4142
+ DM_ACTIVE_PRESENT_FLAG = 0x20
+ DM_BUFFER_FULL_FLAG = 0x100
+ DM_CONTROL_NODE = "control"
+ DM_DATA_OUT_FLAG = 0x10000
+ DM_DEFERRED_REMOVE = 0x20000
+ DM_DEV_ARM_POLL = 0xc138fd10
+ DM_DEV_CREATE = 0xc138fd03
+ DM_DEV_REMOVE = 0xc138fd04
+ DM_DEV_RENAME = 0xc138fd05
+ DM_DEV_SET_GEOMETRY = 0xc138fd0f
+ DM_DEV_STATUS = 0xc138fd07
+ DM_DEV_SUSPEND = 0xc138fd06
+ DM_DEV_WAIT = 0xc138fd08
+ DM_DIR = "mapper"
+ DM_GET_TARGET_VERSION = 0xc138fd11
+ DM_INACTIVE_PRESENT_FLAG = 0x40
+ DM_INTERNAL_SUSPEND_FLAG = 0x40000
+ DM_IOCTL = 0xfd
+ DM_LIST_DEVICES = 0xc138fd02
+ DM_LIST_VERSIONS = 0xc138fd0d
+ DM_MAX_TYPE_NAME = 0x10
+ DM_NAME_LEN = 0x80
+ DM_NOFLUSH_FLAG = 0x800
+ DM_PERSISTENT_DEV_FLAG = 0x8
+ DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000
+ DM_READONLY_FLAG = 0x1
+ DM_REMOVE_ALL = 0xc138fd01
+ DM_SECURE_DATA_FLAG = 0x8000
+ DM_SKIP_BDGET_FLAG = 0x200
+ DM_SKIP_LOCKFS_FLAG = 0x400
+ DM_STATUS_TABLE_FLAG = 0x10
+ DM_SUSPEND_FLAG = 0x2
+ DM_TABLE_CLEAR = 0xc138fd0a
+ DM_TABLE_DEPS = 0xc138fd0b
+ DM_TABLE_LOAD = 0xc138fd09
+ DM_TABLE_STATUS = 0xc138fd0c
+ DM_TARGET_MSG = 0xc138fd0e
+ DM_UEVENT_GENERATED_FLAG = 0x2000
+ DM_UUID_FLAG = 0x4000
+ DM_UUID_LEN = 0x81
+ DM_VERSION = 0xc138fd00
+ DM_VERSION_EXTRA = "-ioctl (2020-02-27)"
+ DM_VERSION_MAJOR = 0x4
+ DM_VERSION_MINOR = 0x2a
+ DM_VERSION_PATCHLEVEL = 0x0
DT_BLK = 0x6
DT_CHR = 0x2
DT_DIR = 0x4
diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go
index a8c4708..83364d7 100644
--- a/unix/ztypes_linux.go
+++ b/unix/ztypes_linux.go
@@ -140,6 +140,48 @@
_ [13]uint32
}
+type DmIoctl struct {
+ Version [3]uint32
+ Data_size uint32
+ Data_start uint32
+ Target_count uint32
+ Open_count int32
+ Flags uint32
+ Event_nr uint32
+ _ uint32
+ Dev uint64
+ Name [128]byte
+ Uuid [129]byte
+ Data [7]byte
+}
+
+type DmTargetSpec struct {
+ Sector_start uint64
+ Length uint64
+ Status int32
+ Next uint32
+ Target_type [16]byte
+}
+
+type DmTargetDeps struct {
+ Count uint32
+ _ uint32
+}
+
+type DmTargetVersions struct {
+ Next uint32
+ Version [3]uint32
+}
+
+type DmTargetMsg struct {
+ Sector uint64
+}
+
+const (
+ SizeofDmIoctl = 0x138
+ SizeofDmTargetSpec = 0x28
+)
+
type KeyctlDHParams struct {
Private int32
Prime int32
diff --git a/unix/ztypes_linux_386.go b/unix/ztypes_linux_386.go
index 761b67c..73509d8 100644
--- a/unix/ztypes_linux_386.go
+++ b/unix/ztypes_linux_386.go
@@ -117,6 +117,11 @@
Pid int32
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_amd64.go b/unix/ztypes_linux_amd64.go
index 201fb34..45eb873 100644
--- a/unix/ztypes_linux_amd64.go
+++ b/unix/ztypes_linux_amd64.go
@@ -117,6 +117,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_arm.go b/unix/ztypes_linux_arm.go
index 8051b56..8f6b453 100644
--- a/unix/ztypes_linux_arm.go
+++ b/unix/ztypes_linux_arm.go
@@ -121,6 +121,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_arm64.go b/unix/ztypes_linux_arm64.go
index a936f21..b1e0c24 100644
--- a/unix/ztypes_linux_arm64.go
+++ b/unix/ztypes_linux_arm64.go
@@ -118,6 +118,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_mips.go b/unix/ztypes_linux_mips.go
index aaca03d..fb802c3 100644
--- a/unix/ztypes_linux_mips.go
+++ b/unix/ztypes_linux_mips.go
@@ -120,6 +120,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_mips64.go b/unix/ztypes_linux_mips64.go
index 2e7f3b8..30abcf3 100644
--- a/unix/ztypes_linux_mips64.go
+++ b/unix/ztypes_linux_mips64.go
@@ -118,6 +118,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_mips64le.go b/unix/ztypes_linux_mips64le.go
index 16add5a..99761aa 100644
--- a/unix/ztypes_linux_mips64le.go
+++ b/unix/ztypes_linux_mips64le.go
@@ -118,6 +118,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_mipsle.go b/unix/ztypes_linux_mipsle.go
index 4ed2c8e..2936903 100644
--- a/unix/ztypes_linux_mipsle.go
+++ b/unix/ztypes_linux_mipsle.go
@@ -120,6 +120,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_ppc64.go b/unix/ztypes_linux_ppc64.go
index 7415190..0ca856e 100644
--- a/unix/ztypes_linux_ppc64.go
+++ b/unix/ztypes_linux_ppc64.go
@@ -119,6 +119,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_ppc64le.go b/unix/ztypes_linux_ppc64le.go
index 046c2de..f50f648 100644
--- a/unix/ztypes_linux_ppc64le.go
+++ b/unix/ztypes_linux_ppc64le.go
@@ -119,6 +119,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_riscv64.go b/unix/ztypes_linux_riscv64.go
index 0f2f61a..4d3ac8d 100644
--- a/unix/ztypes_linux_riscv64.go
+++ b/unix/ztypes_linux_riscv64.go
@@ -118,6 +118,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5
diff --git a/unix/ztypes_linux_s390x.go b/unix/ztypes_linux_s390x.go
index cca1b6b..349f483 100644
--- a/unix/ztypes_linux_s390x.go
+++ b/unix/ztypes_linux_s390x.go
@@ -117,6 +117,13 @@
_ [4]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x6
FADV_NOREUSE = 0x7
diff --git a/unix/ztypes_linux_sparc64.go b/unix/ztypes_linux_sparc64.go
index 33a73bf..80c73be 100644
--- a/unix/ztypes_linux_sparc64.go
+++ b/unix/ztypes_linux_sparc64.go
@@ -121,6 +121,13 @@
_ [2]byte
}
+type DmNameList struct {
+ Dev uint64
+ Next uint32
+ Name [0]byte
+ _ [4]byte
+}
+
const (
FADV_DONTNEED = 0x4
FADV_NOREUSE = 0x5