67 lines
1.8 KiB
C
67 lines
1.8 KiB
C
|
/* sys/ioc_fbd.h - Faulty Block Device ioctl() command codes.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef _S_I_FBD_H
|
||
|
#define _S_I_FBD_H
|
||
|
|
||
|
/* FBD rule structure. */
|
||
|
|
||
|
typedef int fbd_rulenum_t;
|
||
|
|
||
|
struct fbd_rule {
|
||
|
fbd_rulenum_t num; /* rule number (1-based) */
|
||
|
u64_t start; /* start position of area to match */
|
||
|
u64_t end; /* end position (exclusive) (0 = up to EOF) */
|
||
|
int flags; /* match read and/or write requests */
|
||
|
unsigned int skip; /* # matches to skip before activating */
|
||
|
unsigned int count; /* # times left to trigger (0 = no limit) */
|
||
|
int action; /* action type to perform when triggered */
|
||
|
|
||
|
union { /* action parameters */
|
||
|
struct {
|
||
|
int type; /* corruption type */
|
||
|
} corrupt;
|
||
|
|
||
|
struct {
|
||
|
int code; /* error code to return (OK, EIO..) */
|
||
|
} error;
|
||
|
|
||
|
struct {
|
||
|
u64_t start; /* start position of target area */
|
||
|
u64_t end; /* end position of area (excl) */
|
||
|
u32_t align; /* alignment to use in target area */
|
||
|
} misdir;
|
||
|
|
||
|
struct {
|
||
|
u32_t lead; /* # bytes to process normally */
|
||
|
} losttorn;
|
||
|
} params;
|
||
|
};
|
||
|
|
||
|
/* Match flags. */
|
||
|
#define FBD_FLAG_READ 0x1 /* match read requests */
|
||
|
#define FBD_FLAG_WRITE 0x2 /* match write requests */
|
||
|
|
||
|
/* Action types. */
|
||
|
enum {
|
||
|
FBD_ACTION_CORRUPT, /* write or return corrupt data */
|
||
|
FBD_ACTION_ERROR, /* return an I/O error */
|
||
|
FBD_ACTION_MISDIR, /* perform a misdirected write */
|
||
|
FBD_ACTION_LOSTTORN /* perform a lost or torn write */
|
||
|
};
|
||
|
|
||
|
/* Corruption types. */
|
||
|
enum {
|
||
|
FBD_CORRUPT_ZERO, /* write or return ..zeroed data */
|
||
|
FBD_CORRUPT_PERSIST, /* ..consequently the same bad data */
|
||
|
FBD_CORRUPT_RANDOM /* ..new random data every time */
|
||
|
};
|
||
|
|
||
|
/* The I/O control requests. */
|
||
|
#define FBDCADDRULE _IOW('B', 1, struct fbd_rule) /* add a rule */
|
||
|
#define FBDCDELRULE _IOW('B', 2, fbd_rulenum_t) /* delete a rule */
|
||
|
#define FBDCGETRULE _IOWR('B', 3, struct fbd_rule) /* retrieve a rule */
|
||
|
|
||
|
#endif /* _S_I_FBD_H */
|