1 /*
2 * Copyright (c) 2018-2021 The strace developers.
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8 #include "defs.h"
9 #include <linux/ioctl.h>
10 #include <linux/types.h>
11 #include <linux/nbd.h>
12
13 #define XLAT_MACROS_ONLY
14 #include "xlat/nbd_ioctl_cmds.h"
15 #undef XLAT_MACROS_ONLY
16
17 #include "xlat/nbd_ioctl_flags.h"
18
19 int
20 nbd_ioctl(struct tcb *const tcp, const unsigned int code,
21 const kernel_ulong_t arg)
22 {
23 switch (code) {
24 case NBD_DISCONNECT:
25 case NBD_CLEAR_SOCK:
26 case NBD_DO_IT:
27 case NBD_CLEAR_QUE:
28 case NBD_PRINT_DEBUG:
29 return RVAL_IOCTL_DECODED;
30
31 case NBD_SET_SOCK:
32 tprint_arg_next();
33 printfd(tcp, arg);
34 return RVAL_IOCTL_DECODED;
35
36 case NBD_SET_BLKSIZE:
37 case NBD_SET_SIZE:
38 case NBD_SET_SIZE_BLOCKS:
39 case NBD_SET_TIMEOUT:
40 tprint_arg_next();
41 PRINT_VAL_U(arg);
42 return RVAL_IOCTL_DECODED;
43
44 case NBD_SET_FLAGS:
45 tprint_arg_next();
46 printflags(nbd_ioctl_flags, arg, "NBD_IOC_FLAG_???");
47 return RVAL_IOCTL_DECODED;
48
49 default:
50 return RVAL_DECODED;
51 }
52 }