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 */
 | 
