⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hr_filesys.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  Host Resources MIB - File System device group implementation - hr_filesys.c * */#include <net-snmp/net-snmp-config.h>#include "host_res.h"#include "hr_filesys.h"#include "hr_storage.h"#include <net-snmp/utilities.h>#if HAVE_MNTENT_H#include <mntent.h>#endif#if HAVE_SYS_MNTENT_H#include <sys/mntent.h>#endif#if HAVE_SYS_MNTTAB_H#include <sys/mnttab.h>#endif#if HAVE_SYS_STATVFS_H#include <sys/statvfs.h>#endif#if HAVE_SYS_VFS_H#include <sys/vfs.h>#endif#ifdef HAVE_SYS_PARAM_H#include <sys/param.h>#endif#ifdef HAVE_SYS_MOUNT_H#include <sys/mount.h>#endif#include <ctype.h>#if HAVE_STRING_H#include <string.h>#endif#if HAVE_STDLIB_H#include <stdlib.h>#endif#if defined(bsdi4) || defined(freebsd3) || defined(freebsd4) || defined(freebsd5)#if HAVE_GETFSSTAT#if defined(MFSNAMELEN)#define MOUNT_NFS	"nfs"#define MNTTYPE_UFS	"ufs"#define BerkelyFS#define MNTTYPE_FFS	"ffs"#define MNTTYPE_NFS	"nfs"#define MNTTYPE_NFS3	"nfs"#define MNTTYPE_MFS	"mfs"#define MNTTYPE_MSDOS	"msdos"#define MNTTYPE_LFS	"lfs"#define MNTTYPE_FDESC	"fdesc"#define MNTTYPE_PORTAL	"portal"#define MNTTYPE_NULL	"null"#define MNTTYPE_UMAP	"umap"#define MNTTYPE_KERNFS	"kernfs"#define MNTTYPE_PROCFS	"procfs"#define MNTTYPE_AFS	"afs"#define MNTTYPE_CD9660	"cd9660"#define MNTTYPE_UNION	"union"#define MNTTYPE_ADOSFS	"adosfs"#define MNTTYPE_EXT2FS	"ext2fs"#define MNTTYPE_CFS	"coda"#define MNTTYPE_NTFS	"ntfs"#endif#endif#endif                          /* freebsd3 */#define HRFS_MONOTONICALLY_INCREASING        /*********************	 *	 *  Kernel & interface information,	 *   and internal forward declarations	 *	 *********************/#ifdef solaris2struct mnttab   HRFS_entry_struct;struct mnttab  *HRFS_entry = &HRFS_entry_struct;#define	HRFS_name	mnt_special#define	HRFS_mount	mnt_mountp#define	HRFS_type	mnt_fstype#define	HRFS_statfs	statvfs#elif defined(HAVE_STATVFS) && defined(__NetBSD__)static struct statvfs	*fsstats = NULL;struct statvfs		*HRFS_entry;static int		fscount;#define HRFS_mount	f_mntonname#define	HRFS_name	f_mntfromname#define HRFS_statfs	statvfs#define	HRFS_type	f_fstypename#elif defined(HAVE_GETFSSTAT)static struct statfs *fsstats = 0;static int      fscount;struct statfs  *HRFS_entry;#define HRFS_statfs	statfs#ifdef MFSNAMELEN#define HRFS_type	f_fstypename#else#define HRFS_type	f_type#endif#define HRFS_mount	f_mntonname#define HRFS_name	f_mntfromname#elif defined(dynix)struct mntent  *HRFS_entry;#define	HRFS_name	mnt_fsname#define	HRFS_mount	mnt_dir#define	HRFS_type	mnt_type#define	HRFS_statfs	statvfs#elsestruct mntent  *HRFS_entry;#define	HRFS_name	mnt_fsname#define	HRFS_mount	mnt_dir#define	HRFS_type	mnt_type#define	HRFS_statfs	statfs#ifdef linux#define MNTTYPE_CD9660	"iso9660"#define MNTTYPE_EXT2FS	"ext2"#define MNTTYPE_EXT3FS	"ext3"#define MNTTYPE_SMBFS	"smbfs"#define MNTTYPE_MSDOS	"msdos"#define MNTTYPE_FAT32	"vfat"#define MNTTYPE_NTFS	"ntfs"#endif	/* linux */#endif#define	FULL_DUMP	0#define	PART_DUMP	1extern void     Init_HR_FileSys(void);extern int      Get_Next_HR_FileSys(void);char           *cook_device(char *);static u_char  *when_dumped(char *filesys, int level, size_t * length);int             header_hrfilesys(struct variable *, oid *, size_t *, int,                                 size_t *, WriteMethod **);        /*********************	 *	 *  Initialisation & common implementation functions	 *	 *********************/#define HRFSYS_INDEX		1#define HRFSYS_MOUNT		2#define HRFSYS_RMOUNT		3#define HRFSYS_TYPE		4#define HRFSYS_ACCESS		5#define HRFSYS_BOOT		6#define HRFSYS_STOREIDX		7#define HRFSYS_FULLDUMP		8#define HRFSYS_PARTDUMP		9struct variable4 hrfsys_variables[] = {    {HRFSYS_INDEX, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 1}},    {HRFSYS_MOUNT, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 2}},    {HRFSYS_RMOUNT, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 3}},    {HRFSYS_TYPE, ASN_OBJECT_ID, RONLY, var_hrfilesys, 2, {1, 4}},    {HRFSYS_ACCESS, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 5}},    {HRFSYS_BOOT, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 6}},    {HRFSYS_STOREIDX, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 7}},    {HRFSYS_FULLDUMP, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 8}},    {HRFSYS_PARTDUMP, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 9}},};oid             hrfsys_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 8 };voidinit_hr_filesys(void){    REGISTER_MIB("host/hr_filesys", hrfsys_variables, variable4,                 hrfsys_variables_oid);}/* * header_hrfilesys(... * Arguments: * vp     IN      - pointer to variable entry that points here * name    IN/OUT  - IN/name requested, OUT/name found * length  IN/OUT  - length of IN/OUT oid's  * exact   IN      - TRUE if an exact match was requested * var_len OUT     - length of variable or 0 if function returned * write_method *  */intheader_hrfilesys(struct variable *vp,                 oid * name,                 size_t * length,                 int exact, size_t * var_len, WriteMethod ** write_method){#define HRFSYS_ENTRY_NAME_LENGTH	11    oid             newname[MAX_OID_LEN];    int             fsys_idx, LowIndex = -1;    int             result;    DEBUGMSGTL(("host/hr_filesys", "var_hrfilesys: "));    DEBUGMSGOID(("host/hr_filesys", name, *length));    DEBUGMSG(("host/hr_filesys", " %d\n", exact));    memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));    /*     * Find "next" file system entry      */    Init_HR_FileSys();    for (;;) {        fsys_idx = Get_Next_HR_FileSys();        if (fsys_idx == -1)            break;        newname[HRFSYS_ENTRY_NAME_LENGTH] = fsys_idx;        result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);        if (exact && (result == 0)) {            LowIndex = fsys_idx;            break;        }        if ((!exact && (result < 0)) &&            (LowIndex == -1 || fsys_idx < LowIndex)) {            LowIndex = fsys_idx;#ifdef HRFS_MONOTONICALLY_INCREASING            break;#endif        }    }    if (LowIndex == -1) {        DEBUGMSGTL(("host/hr_filesys", "... index out of range\n"));        return (MATCH_FAILED);    }    memcpy((char *) name, (char *) newname,           (vp->namelen + 1) * sizeof(oid));    *length = vp->namelen + 1;    *write_method = 0;    *var_len = sizeof(long);    /* default to 'long' results */    DEBUGMSGTL(("host/hr_filesys", "... get filesys stats "));    DEBUGMSGOID(("host/hr_filesys", name, *length));    DEBUGMSG(("host/hr_filesys", "\n"));    return LowIndex;}oid             fsys_type_id[] = { 1, 3, 6, 1, 2, 1, 25, 3, 9, 1 };     /* hrFSOther */int             fsys_type_len =    sizeof(fsys_type_id) / sizeof(fsys_type_id[0]);        /*********************	 *	 *  System specific implementation functions	 *	 *********************/u_char         *var_hrfilesys(struct variable *vp,              oid * name,              size_t * length,              int exact, size_t * var_len, WriteMethod ** write_method){    int             fsys_idx;    static char     string[1024];    char           *mnt_type;    fsys_idx =        header_hrfilesys(vp, name, length, exact, var_len, write_method);    if (fsys_idx == MATCH_FAILED)        return NULL;    switch (vp->magic) {    case HRFSYS_INDEX:        long_return = fsys_idx;        return (u_char *) & long_return;    case HRFSYS_MOUNT:        snprintf(string, sizeof(string), HRFS_entry->HRFS_mount);        string[ sizeof(string)-1 ] = 0;        *var_len = strlen(string);        return (u_char *) string;    case HRFSYS_RMOUNT:        if (Check_HR_FileSys_NFS()) {            snprintf(string, sizeof(string), HRFS_entry->HRFS_name);            string[ sizeof(string)-1 ] = 0;        } else            string[0] = '\0';        *var_len = strlen(string);        return (u_char *) string;    case HRFSYS_TYPE:        if (Check_HR_FileSys_NFS())            fsys_type_id[fsys_type_len - 1] = 14;        else {        /*         * Not sufficient to identity the file         *   type precisely, but it's a start.         */#if HAVE_GETFSSTAT && !defined(MFSNAMELEN)        switch (HRFS_entry->HRFS_type) {        case MOUNT_UFS:            fsys_type_id[fsys_type_len - 1] = 3;            break;        case MOUNT_NFS:            fsys_type_id[fsys_type_len - 1] = 14;            break;        case MOUNT_MFS:            fsys_type_id[fsys_type_len - 1] = 8;            break;        case MOUNT_MSDOS:            fsys_type_id[fsys_type_len - 1] = 5;            break;        case MOUNT_LFS:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_LOFS:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_FDESC:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_PORTAL:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_NULL:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_UMAP:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_KERNFS:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_PROCFS:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_AFS:            fsys_type_id[fsys_type_len - 1] = 16;            break;        case MOUNT_CD9660:            fsys_type_id[fsys_type_len - 1] = 12;            break;        case MOUNT_UNION:            fsys_type_id[fsys_type_len - 1] = 1;            break;        case MOUNT_DEVFS:            fsys_type_id[fsys_type_len - 1] = 1;            break;#ifdef MOUNT_EXT2FS        case MOUNT_EXT2FS:            fsys_type_id[fsys_type_len - 1] = 23;            break;#endif#ifdef MOUNT_TFS        case MOUNT_TFS:            fsys_type_id[fsys_type_len - 1] = 15;            break;#endif        }#else        mnt_type = HRFS_entry->HRFS_type;        if (mnt_type == NULL)            fsys_type_id[fsys_type_len - 1] = 2;        /* unknown */#ifdef MNTTYPE_HFS        else if (!strcmp(mnt_type, MNTTYPE_HFS))#ifdef BerkelyFS            fsys_type_id[fsys_type_len - 1] = 3;#else                           /* SysV */            fsys_type_id[fsys_type_len - 1] = 4;#endif#endif#ifdef MNTTYPE_UFS        else if (!strcmp(mnt_type, MNTTYPE_UFS))#if (defined(BerkelyFS) && !defined(MNTTYPE_HFS)) || defined(solaris2)            fsys_type_id[fsys_type_len - 1] = 3;#else                           /* SysV */            fsys_type_id[fsys_type_len - 1] = 4;        /* or 3? XXX */#endif#endif#ifdef MNTTYPE_SYSV        else if (!strcmp(mnt_type, MNTTYPE_SYSV))            fsys_type_id[fsys_type_len - 1] = 4;#endif#ifdef MNTTYPE_PC        else if (!strcmp(mnt_type, MNTTYPE_PC))            fsys_type_id[fsys_type_len - 1] = 5;#endif#ifdef MNTTYPE_MSDOS        else if (!strcmp(mnt_type, MNTTYPE_MSDOS))            fsys_type_id[fsys_type_len - 1] = 5;#endif#ifdef MNTTYPE_FAT32        else if (!strcmp(mnt_type, MNTTYPE_FAT32))            fsys_type_id[fsys_type_len - 1] = 22;#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -