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

📄 hr_storage.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	 *	 *  System specific implementation functions	 *	 *********************/static const char *hrs_descr[] = {	NULL,	"Real Memory",		/* HRS_TYPE_MEM */	"Swap Space",		/* HRS_TYPE_SWAP */	"Memory Buffers"	/* HRS_TYPE_MBUF */};u_char *var_hrstore(struct variable *vp,	    oid *name,	    size_t *length,	    int exact,	    size_t *var_len,	    WriteMethod **write_method){    int store_idx=0;#if !defined(linux)#if defined(solaris2)    int freemem;    int swap_total, swap_used;#elif defined(hpux10) || defined(hpux11)    struct pst_dynamic pst_buf;#elif defined(TOTAL_MEMORY_SYMBOL) || defined(USE_SYSCTL_VM)    struct vmtotal memory_totals;#endif#if HAVE_SYS_POOL_H    struct pool mbpool, mclpool;    int i;#endif#ifdef MBSTAT_SYMBOL    struct mbstat  mbstat;#endif#endif	/* !linux */    static char string[100];    struct HRFS_statfs stat_buf;    if ( vp->magic == HRSTORE_MEMSIZE ) {        if (header_hrstore(vp, name, length, exact, var_len, write_method) == MATCH_FAILED )	    return NULL;    }    else {                store_idx = header_hrstoreEntry(vp, name, length, exact, var_len, write_method);        if ( store_idx == MATCH_FAILED )	    return NULL;	if ( store_idx < HRS_TYPE_FS_MAX ) {	    if ( HRFS_statfs( HRFS_entry->HRFS_mount, &stat_buf) < 0 )		return NULL;	}#if !defined(linux) && !defined(solaris2)	else switch ( store_idx ) {		case HRS_TYPE_MEM:		case HRS_TYPE_SWAP:#ifdef USE_SYSCTL_VM			{   int mib[2];			    size_t len = sizeof(memory_totals);			    mib[0] = CTL_VM;			    mib[1] = VM_METER;			    sysctl(mib, 2, &memory_totals, &len, NULL, 0);			}#elif defined(hpux10) || defined(hpux11)			pstat_getdynamic(&pst_buf, sizeof(struct pst_dynamic), 1, 0);#elif defined(TOTAL_MEMORY_SYMBOL)			auto_nlist(TOTAL_MEMORY_SYMBOL, (char *)&memory_totals, sizeof (struct vmtotal));#endif			break;#if !defined(hpux10) && !defined(hpux11)		case HRS_TYPE_MBUF:#if HAVE_SYS_POOL_H			auto_nlist(MBPOOL_SYMBOL, (char *)&mbpool, sizeof(mbpool));			auto_nlist(MCLPOOL_SYMBOL, (char *)&mclpool, sizeof(mclpool));#endif#ifdef MBSTAT_SYMBOL			auto_nlist(MBSTAT_SYMBOL, (char *)&mbstat, sizeof (mbstat));#endif			break;#endif	/* !hpux10 && !hpux11 */		default:			break;	}#endif	/* !linux && !solaris2 */    }            switch (vp->magic){	case HRSTORE_MEMSIZE:	    long_return = physmem * (pagesize / 1024);	    return (u_char *)&long_return;	case HRSTORE_INDEX:	    long_return = store_idx;	    return (u_char *)&long_return;	case HRSTORE_TYPE:	    if ( store_idx < HRS_TYPE_FS_MAX ) {		if (storageUseNFS && Check_HR_FileSys_NFS())		    storage_type_id[storage_type_len-1] = 10;	/* Network Disk */		else		    storage_type_id[storage_type_len-1] = 4;	/* Fixed Disk */	    }	    else switch ( store_idx ) {		case HRS_TYPE_MEM:			storage_type_id[storage_type_len-1] = 2;	/* RAM */			break;		case HRS_TYPE_SWAP:			storage_type_id[storage_type_len-1] = 3;	/* Virtual Mem */			break;		case HRS_TYPE_MBUF:			storage_type_id[storage_type_len-1] = 1;	/* Other */			break;		default:			storage_type_id[storage_type_len-1] = 1;	/* Other */			break;	    }            *var_len = sizeof(storage_type_id);	    return (u_char *)storage_type_id;	case HRSTORE_DESCR:	    if (store_idx<HRS_TYPE_FS_MAX) {	        strcpy(string, HRFS_entry->HRFS_mount);	        *var_len = strlen(string);	        return (u_char *) string;	    }	    else {	        store_idx = store_idx-HRS_TYPE_FS_MAX;	        *var_len = strlen( hrs_descr[store_idx] );	        return (u_char *)hrs_descr[store_idx];	    }	case HRSTORE_UNITS:	    if ( store_idx < HRS_TYPE_FS_MAX )#if STRUCT_STATVFS_HAS_F_FRSIZE		long_return = stat_buf.f_frsize;#else		long_return = stat_buf.f_bsize;#endif	    else switch ( store_idx ) {		case HRS_TYPE_MEM:		case HRS_TYPE_SWAP:#if defined(USE_SYSCTL) || defined(solaris2)			long_return = pagesize;#elif defined(NBPG)			long_return = NBPG;#else			long_return = 1024;	/* Report in Kb */#endif			break;		case HRS_TYPE_MBUF:#ifdef MSIZE			long_return = MSIZE;#else			long_return = 256;#endif			break;		default:#if NO_DUMMY_VALUES			return NULL;#endif			long_return = 1024;	/* As likely as any! */			break;	    }	    return (u_char *)&long_return;	case HRSTORE_SIZE:	    if ( store_idx < HRS_TYPE_FS_MAX )		long_return = stat_buf.f_blocks;	    else switch ( store_idx ) {#if defined(linux)		case HRS_TYPE_MEM:		case HRS_TYPE_SWAP:			long_return = linux_mem( store_idx, HRSTORE_SIZE);			break;#elif defined(solaris2)		case HRS_TYPE_MEM:			long_return = physmem;			break;		case HRS_TYPE_SWAP:			sol_get_swapinfo(&swap_total, &swap_used);			long_return = swap_total;			break;#elif defined(hpux10) || defined(hpux11)		case HRS_TYPE_MEM:			long_return = pst_buf.psd_rm;			break;		case HRS_TYPE_SWAP:			long_return = pst_buf.psd_vm;			break;#elif defined(TOTAL_MEMORY_SYMBOL) || defined(USE_SYSCTL_VM)		case HRS_TYPE_MEM:			long_return = memory_totals.t_rm;			break;		case HRS_TYPE_SWAP:			long_return = memory_totals.t_vm;			break;#else	/* !linux && !solaris2 && !hpux10 && !hpux11 && ... */		case HRS_TYPE_MEM:			long_return = physmem;			break;		case HRS_TYPE_SWAP:#if NO_DUMMY_VALUES			return NULL;#endif			long_return = 0;			break;#endif	/* !linux && !solaris2 && !hpux10 && !hpux11 && ... */#if !defined(linux) && !defined(solaris2) && !defined(hpux10) && !defined(hpux11)		case HRS_TYPE_MBUF:#if HAVE_SYS_POOL_H			long_return = 0;			for (i = 0; i < sizeof(mbstat.m_mtypes)/sizeof(mbstat.m_mtypes[0]); i++)			    long_return += mbstat.m_mtypes[i];#elif defined(MBSTAT_SYMBOL)			long_return = mbstat.m_mbufs;#elif defined(NO_DUMMY_VALUES)			return NULL;#else			long_return = 0;#endif			break;#endif	/* !linux && !solaris2 && !hpux10 && !hpux11 */		default:#if NO_DUMMY_VALUES			return NULL;#endif			long_return = 1024;			break;	    }	    return (u_char *)&long_return;	case HRSTORE_USED:	    if ( store_idx < HRS_TYPE_FS_MAX )		long_return = (stat_buf.f_blocks - stat_buf.f_bfree);	    else switch ( store_idx ) {#if defined(linux)		case HRS_TYPE_MEM:		case HRS_TYPE_SWAP:			long_return = linux_mem( store_idx, HRSTORE_USED);			break;#elif defined(solaris2)		case HRS_TYPE_MEM:			getKstatInt("unix", "system_pages", "freemem",			    &freemem);			long_return = physmem - freemem;			break;		case HRS_TYPE_SWAP:			sol_get_swapinfo(&swap_total, &swap_used);			long_return = swap_used;			break;#elif defined(hpux10) || defined(hpux11)		case HRS_TYPE_MEM:			long_return = pst_buf.psd_arm;			break;		case HRS_TYPE_SWAP:			long_return = pst_buf.psd_avm;			break;#elif defined(TOTAL_MEMORY_SYMBOL) || defined(USE_SYSCTL_VM)		case HRS_TYPE_MEM:			long_return = memory_totals.t_arm;			break;		case HRS_TYPE_SWAP:			long_return = memory_totals.t_avm;			break;#endif	/* linux || solaris2 || hpux10 || hpux11 || ... */#if !defined(linux) && !defined(solaris2) && !defined(hpux10) && !defined(hpux11)		case HRS_TYPE_MBUF:#if HAVE_SYS_POOL_H			long_return = (mbpool.pr_nget - mbpool.pr_nput)				    * mbpool.pr_size				+ (mclpool.pr_nget - mclpool.pr_nput)				    * mclpool.pr_size;#elif defined(MBSTAT_SYMBOL)			long_return = mbstat.m_clusters - mbstat.m_clfree;	/* unlikely, but... */#elif defined(NO_DUMMY_VALUES)			return NULL;#else			long_return = 0;#endif			break;#endif	/* !linux && !solaris2 && !hpux10 && !hpux11 */		default:#if NO_DUMMY_VALUES			return NULL;#endif			long_return = 1024;			break;	    }	    return (u_char *)&long_return;	case HRSTORE_FAILS:	    if ( store_idx < HRS_TYPE_FS_MAX )		long_return = 0;	    else switch ( store_idx ) {		case HRS_TYPE_MEM:		case HRS_TYPE_SWAP:#if NO_DUMMY_VALUES			return NULL;#endif			long_return = 0;			break;#if !defined(linux) && !defined(solaris2) && !defined(hpux10) && !defined(hpux11)		case HRS_TYPE_MBUF:#if defined(MBSTAT_SYMBOL)			long_return = mbstat.m_drops;#elif defined(NO_DUMMY_VALUES)			return NULL;#else			long_return = 0;#endif			break;#endif	/* !linux && !solaris2 && !hpux10 && !hpux11 */		default:#if NO_DUMMY_VALUES			return NULL;#else			long_return = 0;#endif			break;	    }	    return (u_char *)&long_return;	default:	    DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrstore\n", vp->magic));    }    return NULL;}	/*********************	 *	 *  Internal implementation functions	 *	 *********************/static int FS_storage;static int HRS_index;voidInit_HR_Store (void){   HRS_index = -1;   Init_HR_FileSys();   FS_storage = 1;	/* Start with file-based storage */}intGet_Next_HR_Store(void){		/* File-based storage */    long_return = -1;    if ( FS_storage == 1 ) {	HRS_index = Get_Next_HR_FileSys();        if ( HRS_index >= 0 )             return HRS_index;	FS_storage = 0;		/* End of filesystems */	HRS_index = HRS_TYPE_FS_MAX;    }		/* 'Other' storage types */    ++HRS_index;#if !defined(solaris2) && !defined(hpux10) && !defined(hpux11)    if ( HRS_index < HRS_TYPE_MAX )	return HRS_index;    else#else	/* solaris2 || hpux10 || hpux11 */    if ( HRS_index < HRS_TYPE_MBUF )	return HRS_index;    else#endif	/* solaris2 || hpux10 || hpux11 */	return -1;}#ifdef linuxintlinux_mem(int mem_type, 	  int size_or_used){    FILE *fp;    char buf[100];    int size = -1, used = -1;    if ((fp = fopen( "/proc/meminfo", "r")) == NULL )	return -1;    while ( fgets( buf, sizeof(buf), fp ) != NULL ) {	if (( !strncmp( buf, "Mem:", 4 ) && mem_type == HRS_TYPE_MEM ) ||	    ( !strncmp( buf, "Swap:", 5 ) && mem_type == HRS_TYPE_SWAP )) {		sscanf( buf, "%*s %d %d", &size, &used );		break;	}    }    fclose(fp);    return ( size_or_used == HRSTORE_SIZE ? size : used )/1024;}#endif#ifdef solaris2voidsol_get_swapinfo(int *totalP, int *usedP){    struct anoninfo ainfo;    if (swapctl(SC_AINFO, &ainfo) < 0) {	*totalP = *usedP = 0;	return;    }    *totalP = ainfo.ani_max;    *usedP = ainfo.ani_resv;}#endif	/* solaris2 */

⌨️ 快捷键说明

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