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

📄 hr_filesys.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  Host Resources MIB - File System device group implementation - hr_filesys.c * */#include <config.h>#ifdef dynix#if HAVE_SYS_SELECT_H#include <sys/select.h>#endif#endif#include "host_res.h"#include "hr_filesys.h"#include "hr_utils.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_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#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 };void init_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[100];    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:	    sprintf(string, HRFS_entry->HRFS_mount);	    *var_len = strlen(string);	    return (u_char *) string;	case HRFSYS_RMOUNT:	    if (Check_HR_FileSys_NFS())	        sprintf(string, HRFS_entry->HRFS_name);	    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)			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_CDFS	    else if (!strcmp( mnt_type, MNTTYPE_CDFS))#ifdef RockRidge			fsys_type_id[fsys_type_len-1] = 13;#else /* ISO 9660 */			fsys_type_id[fsys_type_len-1] = 12;#endif#endif#ifdef MNTTYPE_ISO9660	    else if (!strcmp( mnt_type, MNTTYPE_ISO9660))			fsys_type_id[fsys_type_len-1] = 12;#endif#ifdef MNTTYPE_NFS	    else if (!strcmp( mnt_type, MNTTYPE_NFS))			fsys_type_id[fsys_type_len-1] = 14;#endif#ifdef MNTTYPE_NFS3	    else if (!strcmp( mnt_type, MNTTYPE_NFS3))

⌨️ 快捷键说明

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