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