typedef struct netsnmp_fsys_info_s netsnmp_fsys_info;

#define _NETSNMP_FS_TYPE_SKIP_BIT   0x2000
#define _NETSNMP_FS_TYPE_LOCAL      0x1000

   /*
    * Enumeration from HOST-RESOURCES-TYPES mib
    */
#define NETSNMP_FS_TYPE_OTHER	   1
#define NETSNMP_FS_TYPE_UNKNOWN	   2
#define NETSNMP_FS_TYPE_BERKELEY   3
#define NETSNMP_FS_TYPE_SYSV	   4
#define NETSNMP_FS_TYPE_FAT	   5
#define NETSNMP_FS_TYPE_HPFS	   6
#define NETSNMP_FS_TYPE_HFS	   7
#define NETSNMP_FS_TYPE_MFS	   8
#define NETSNMP_FS_TYPE_NTFS	   9
#define NETSNMP_FS_TYPE_VNODE	   10
#define NETSNMP_FS_TYPE_JFS	   11
#define NETSNMP_FS_TYPE_ISO9660	   12
#define NETSNMP_FS_TYPE_ROCKRIDGE  13
#define NETSNMP_FS_TYPE_NFS	   14
#define NETSNMP_FS_TYPE_NETWARE	   15
#define NETSNMP_FS_TYPE_AFS	   16
#define NETSNMP_FS_TYPE_DFS	   17
#define NETSNMP_FS_TYPE_APPLESHARE 18
#define NETSNMP_FS_TYPE_RFS	   19
#define NETSNMP_FS_TYPE_DGCS	   20
#define NETSNMP_FS_TYPE_BOOTFS	   21
#define NETSNMP_FS_TYPE_FAT32	   22
#define NETSNMP_FS_TYPE_EXT2	   23

   /*
    * Additional enumerationis - not listed in that MIB
    */
#define NETSNMP_FS_TYPE_IGNORE	   1 | _NETSNMP_FS_TYPE_LOCAL | _NETSNMP_FS_TYPE_SKIP_BIT

#define NETSNMP_FS_TYPE_PROC	   2 | _NETSNMP_FS_TYPE_LOCAL | _NETSNMP_FS_TYPE_SKIP_BIT

#define NETSNMP_FS_TYPE_DEVPTS	   3 | _NETSNMP_FS_TYPE_LOCAL | _NETSNMP_FS_TYPE_SKIP_BIT
#define NETSNMP_FS_TYPE_SYSFS	   4 | _NETSNMP_FS_TYPE_LOCAL | _NETSNMP_FS_TYPE_SKIP_BIT
#define NETSNMP_FS_TYPE_TMPFS	   5 | _NETSNMP_FS_TYPE_LOCAL
#define NETSNMP_FS_TYPE_USBFS	   6 | _NETSNMP_FS_TYPE_LOCAL

#define NETSNMP_FS_FLAG_ACTIVE   0x01
#define NETSNMP_FS_FLAG_REMOTE   0x02
#define NETSNMP_FS_FLAG_RONLY    0x04
#define NETSNMP_FS_FLAG_BOOTABLE 0x08
#define NETSNMP_FS_FLAG_REMOVE   0x10
#define NETSNMP_FS_FLAG_UCD      0x20

#define NETSNMP_FS_FIND_CREATE     1   /* or use one of the type values */
#define NETSNMP_FS_FIND_EXIST      0

struct netsnmp_fsys_info_s {
     netsnmp_index  idx;
  /* int  idx; */
 
     char path[  SNMP_MAXPATH+1];
     char device[SNMP_MAXPATH+1];
     int  type;

     long size;
     long used;
     long avail;
     long units;

     long inums_total;
     long inums_avail;

     int  minspace;
     int  minpercent;

     long flags;

     netsnmp_fsys_info *next;
};


    /*
     * Possibly not all needed ??
     */
netsnmp_fsys_info *netsnmp_fsys_get_first( void );
netsnmp_fsys_info *netsnmp_fsys_get_next( netsnmp_fsys_info* );
netsnmp_fsys_info *netsnmp_fsys_get_byIdx(  int,   int );
netsnmp_fsys_info *netsnmp_fsys_get_next_byIdx(int,int );

netsnmp_fsys_info *netsnmp_fsys_by_device(  char*, int );
netsnmp_fsys_info *netsnmp_fsys_by_path(    char*, int );

netsnmp_cache *netsnmp_fsys_get_cache( void );
int  netsnmp_fsys_load( netsnmp_cache *cache, void *data );
void netsnmp_fsys_free( netsnmp_cache *cache, void *data );

int netsnmp_fsys_size( netsnmp_fsys_info* );
int netsnmp_fsys_used( netsnmp_fsys_info* );
int netsnmp_fsys_avail(netsnmp_fsys_info* );

unsigned long long netsnmp_fsys_size_ull( netsnmp_fsys_info* );
unsigned long long netsnmp_fsys_used_ull( netsnmp_fsys_info* );
unsigned long long netsnmp_fsys_avail_ull(netsnmp_fsys_info* );
