1 /*
   2  * This file and its contents are supplied under the terms of the
   3  * Common Development and Distribution License ("CDDL"), version 1.0.
   4  * You may only use this file in accordance with the terms of version
   5  * 1.0 of the CDDL.
   6  *
   7  * A full copy of the text of the CDDL should have accompanied this
   8  * source.  A copy of the CDDL is also available via the Internet at
   9  * http://www.illumos.org/license/CDDL.
  10  */
  11 
  12 /*
  13  * Copyright 2013 Damian Bogel.  All rights reserved.
  14  */
  15 
  16 #ifndef _FSD_H
  17 #define _FSD_H
  18 
  19 /*
  20  * filesystem disturber header file
  21  */
  22 
  23 #ifdef __cplusplus
  24 extern "C" {
  25 #endif
  26 
  27 #include <sys/errno.h>
  28 #include <sys/ksynch.h>
  29 #include <sys/list.h>
  30 #include <sys/param.h>
  31 #include <sys/types.h>
  32 #include <sys/vfs.h>
  33 
  34 
  35 #define FSD_DEV_PATH    "/dev/fsd"
  36 
  37 /*
  38  * Commands for ioctl().
  39  */
  40 #define FSDIOC  (('f' << 24) | ('s' << 16) | ('d' << 8))
  41 #define FSD_GET_PARAM           (FSDIOC | 1)
  42 #define FSD_ENABLE              (FSDIOC | 2)
  43 #define FSD_DISABLE             (FSDIOC | 3)
  44 #define FSD_DISTURB             (FSDIOC | 4)
  45 #define FSD_DISTURB_OFF         (FSDIOC | 5)
  46 #define FSD_DISTURB_OMNI        (FSDIOC | 6)
  47 #define FSD_DISTURB_OMNI_OFF    (FSDIOC | 7)
  48 #define FSD_GET_LIST            (FSDIOC | 8)
  49 #define FSD_GET_INFO            (FSDIOC | 9)
  50 
  51 
  52 /*
  53  * Parameters description:
  54  * "read less"
  55  *      Makes a VOP_READ() call read n (from a given range) bytes less than it
  56  *      was requested.
  57  */
  58 typedef struct fsd {
  59         uint64_t        read_less_chance;
  60         uint64_t        read_less_r[2]; /* range */
  61 } fsd_t;
  62 
  63 typedef struct fsd_info {
  64         uint64_t        fsdinf_enabled;         /* fsd enabled */
  65         uint64_t        fsdinf_count;           /* disturbers installed */
  66         uint64_t        fsdinf_omni_on;         /* omnipresent disturber on */
  67         fsd_t           fsdinf_omni_param;      /* omnipresent dist. params */
  68 } fsd_info_t;
  69 
  70 typedef struct fsd_dis {
  71         int64_t fsdd_mnt;
  72         fsd_t   fsdd_param;
  73 } fsd_dis_t;
  74 
  75 typedef struct fsd_fs {
  76         fsd_t   fsdf_param;
  77         uint8_t fsdf_name[MAXPATHLEN];
  78 } fsd_fs_t;
  79 
  80 typedef union fsd_ioc {         /* Used with:                           */
  81         fsd_info_t fsdioc_info; /* _GET_INFO                            */
  82         fsd_dis_t fsdioc_dis;   /* _DISTURB                             */
  83         fsd_t   fsdioc_param;   /* _GET_PARAM out, _DISTURB_OMNI        */
  84         int64_t fsdioc_mnt;     /* _DISTURB_OFF, _GET_PARAM in          */
  85         struct {
  86                 int64_t count;
  87                 uint64_t listp;
  88         } fsdioc_list;          /* _GET_LIST                            */
  89 } fsd_ioc_t;
  90 
  91 #ifdef __cplusplus
  92 }
  93 #endif
  94 
  95 #endif /* _FSD_H */