xref: /minix3/minix/include/sys/ioc_fbd.h (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1 /*	sys/ioc_fbd.h - Faulty Block Device ioctl() command codes.
2  *
3  */
4 
5 #ifndef _S_I_FBD_H
6 #define _S_I_FBD_H
7 
8 /* FBD rule structure. */
9 
10 typedef int fbd_rulenum_t;
11 
12 struct fbd_rule {
13 	fbd_rulenum_t num;	/* rule number (1-based) */
14 	u64_t start;		/* start position of area to match */
15 	u64_t end;		/* end position (exclusive) (0 = up to EOF) */
16 	int flags;		/* match read and/or write requests */
17 	unsigned int skip;	/* # matches to skip before activating */
18 	unsigned int count;	/* # times left to trigger (0 = no limit) */
19 	int action;		/* action type to perform when triggered */
20 
21 	union {			/* action parameters */
22 		struct {
23 			int type;	/* corruption type */
24 		} corrupt;
25 
26 		struct {
27 			int code;	/* error code to return (OK, EIO..) */
28 		} error;
29 
30 		struct {
31 			u64_t start;	/* start position of target area */
32 			u64_t end;	/* end position of area (excl) */
33 			u32_t align;	/* alignment to use in target area */
34 		} misdir;
35 
36 		struct {
37 			u32_t lead;	/* # bytes to process normally */
38 		} losttorn;
39 	} params;
40 };
41 
42 /* Match flags. */
43 #define FBD_FLAG_READ	0x1		/* match read requests */
44 #define FBD_FLAG_WRITE	0x2		/* match write requests */
45 
46 /* Action types. */
47 enum {
48 	FBD_ACTION_CORRUPT,		/* write or return corrupt data */
49 	FBD_ACTION_ERROR,		/* return an I/O error */
50 	FBD_ACTION_MISDIR,		/* perform a misdirected write */
51 	FBD_ACTION_LOSTTORN		/* perform a lost or torn write */
52 };
53 
54 /* Corruption types. */
55 enum {
56 	FBD_CORRUPT_ZERO,		/* write or return ..zeroed data */
57 	FBD_CORRUPT_PERSIST,		/* ..consequently the same bad data */
58 	FBD_CORRUPT_RANDOM		/* ..new random data every time */
59 };
60 
61 /* The I/O control requests. */
62 #define FBDCADDRULE	_IOW('B', 1, struct fbd_rule)	/* add a rule */
63 #define FBDCDELRULE	_IOW('B', 2, fbd_rulenum_t)	/* delete a rule */
64 #define FBDCGETRULE	_IOWR('B', 3, struct fbd_rule)	/* retrieve a rule */
65 
66 #endif /* _S_I_FBD_H */
67