Gluks would be a built-in format in the QEMU block layer. Signed-off-by: Hyman Huang <yong.hu...@smartx.com> --- block/generic-luks.c | 81 ++++++++++++++++++++++++++++++++++++++++++++ block/generic-luks.h | 26 ++++++++++++++ block/meson.build | 1 + 3 files changed, 108 insertions(+) create mode 100644 block/generic-luks.c create mode 100644 block/generic-luks.h
diff --git a/block/generic-luks.c b/block/generic-luks.c new file mode 100644 index 0000000000..f23e202991 --- /dev/null +++ b/block/generic-luks.c @@ -0,0 +1,81 @@ +/* + * QEMU block driver for the generic luks encryption + * + * Copyright (c) 2024 SmartX Inc + * + * Author: Hyman Huang <yong.hu...@smartx.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#include "qemu/osdep.h" + +#include "block/block_int.h" +#include "block/crypto.h" +#include "crypto/block.h" + +#include "generic-luks.h" + +/* BDRVGLUKSState holds the state of one generic LUKS instance */ +typedef struct BDRVGLUKSState { + BlockCrypto crypto; + BdrvChild *header; /* LUKS header node */ + uint64_t header_size; /* In bytes */ +} BDRVGLUKSState; + +static int gluks_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) +{ + return 0; +} + +static int coroutine_fn GRAPH_UNLOCKED +gluks_co_create_opts(BlockDriver *drv, const char *filename, + QemuOpts *opts, Error **errp) +{ + return 0; +} + +static void +gluks_child_perms(BlockDriverState *bs, BdrvChild *c, + const BdrvChildRole role, + BlockReopenQueue *reopen_queue, + uint64_t perm, uint64_t shared, + uint64_t *nperm, uint64_t *nshared) +{ + +} + +static int64_t coroutine_fn GRAPH_RDLOCK +gluks_co_getlength(BlockDriverState *bs) +{ + return 0; +} + +static BlockDriver bdrv_generic_luks = { + .format_name = "gluks", + .instance_size = sizeof(BDRVGLUKSState), + .bdrv_open = gluks_open, + .bdrv_co_create_opts = gluks_co_create_opts, + .bdrv_child_perm = gluks_child_perms, + .bdrv_co_getlength = gluks_co_getlength, +}; + +static void block_generic_luks_init(void) +{ + bdrv_register(&bdrv_generic_luks); +} + +block_init(block_generic_luks_init); diff --git a/block/generic-luks.h b/block/generic-luks.h new file mode 100644 index 0000000000..2aae866fa4 --- /dev/null +++ b/block/generic-luks.h @@ -0,0 +1,26 @@ +/* + * QEMU block driver for the generic luks encryption + * + * Copyright (c) 2024 SmartX Inc + * + * Author: Hyman Huang <yong.hu...@smartx.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifndef GENERIC_LUKS_H +#define GENERIC_LUKS_H + +#endif /* GENERIC_LUKS_H */ diff --git a/block/meson.build b/block/meson.build index 59ff6d380c..74f2da7bed 100644 --- a/block/meson.build +++ b/block/meson.build @@ -39,6 +39,7 @@ block_ss.add(files( 'throttle.c', 'throttle-groups.c', 'write-threshold.c', + 'generic-luks.c', ), zstd, zlib, gnutls) system_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c')) -- 2.39.1