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

📄 hr_storage.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
static const char *hrs_descr[] = {    NULL,    "Memory Buffers",           /* HRS_TYPE_MBUF */    "Real Memory",              /* HRS_TYPE_MEM */    "Swap Space"                /* HRS_TYPE_SWAP */};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[1024];    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 {really_try_next:	store_idx = header_hrstoreEntry(vp, name, length, exact, var_len,					write_method);	if (store_idx == MATCH_FAILED)	    return NULL;	if (store_idx > HRS_TYPE_FIXED_MAX) {	    if (HRFS_statfs(HRFS_entry->HRFS_mount, &stat_buf) < 0) {		snmp_log_perror(HRFS_entry->HRFS_mount);		goto try_next;	    }	}#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_FIXED_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;      /* Assume fixed */        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_FIXED_MAX) {            strncpy(string, HRFS_entry->HRFS_mount, sizeof(string)-1);            string[ sizeof(string)-1 ] = 0;            *var_len = strlen(string);            return (u_char *) string;        } else {            /* store_idx = store_idx - 1; */            *var_len = strlen(hrs_descr[store_idx]);            return (u_char *) hrs_descr[store_idx];        }    case HRSTORE_UNITS:        if (store_idx > HRS_TYPE_FIXED_MAX)#if HRFS_HAS_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;#elif defined(linux)                long_return = 1024;#else                long_return = 256;#endif                break;            default:#if NO_DUMMY_VALUES                goto try_next;#endif                long_return = 1024;     /* As likely as any! */                break;            }        return (u_char *) & long_return;    case HRSTORE_SIZE:        if (store_idx > HRS_TYPE_FIXED_MAX)            long_return = stat_buf.f_blocks;        else            switch (store_idx) {#if defined(linux)            case HRS_TYPE_MBUF:            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                goto try_next;#endif                long_return = 0;                break;            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)                goto try_next;#else                long_return = 0;#endif                break;#endif              /* !linux && !solaris2 && !hpux10 && !hpux11 && ... */            default:#if NO_DUMMY_VALUES                goto try_next;#endif                long_return = 1024;                break;            }        return (u_char *) & long_return;    case HRSTORE_USED:        if (store_idx > HRS_TYPE_FIXED_MAX)            long_return = (stat_buf.f_blocks - stat_buf.f_bfree);        else            switch (store_idx) {#if defined(linux)            case HRS_TYPE_MBUF:            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) && defined(STRUCT_MBSTAT_HAS_M_CLUSTERS)                long_return = mbstat.m_clusters - mbstat.m_clfree;      /* unlikely, but... */#elif defined(NO_DUMMY_VALUES)                goto try_next;#else                long_return = 0;#endif                break;#endif                      /* !linux && !solaris2 && !hpux10 && !hpux11 && ... */            default:#if NO_DUMMY_VALUES                goto try_next;#endif                long_return = 1024;                break;            }        return (u_char *) & long_return;    case HRSTORE_FAILS:        if (store_idx > HRS_TYPE_FIXED_MAX)#if NO_DUMMY_VALUES	    goto try_next;#else            long_return = 0;#endif        else            switch (store_idx) {            case HRS_TYPE_MEM:            case HRS_TYPE_SWAP:#if NO_DUMMY_VALUES                goto try_next;#endif                long_return = 0;                break;#if !defined(linux) && !defined(solaris2) && !defined(hpux10) && !defined(hpux11)  && defined(MBSTAT_SYMBOL)            case HRS_TYPE_MBUF:                long_return = mbstat.m_drops;                break;#endif                          /* !linux && !solaris2 && !hpux10 && !hpux11 && MBSTAT_SYMBOL */            default:#if NO_DUMMY_VALUES                goto try_next;#endif                long_return = 0;                break;            }        return (u_char *) & long_return;    default:        DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrstore\n",                    vp->magic));    }    return NULL;  try_next:    if (!exact)        goto really_try_next;    return NULL;}        /*********************	 *	 *  Internal implementation functions	 *	 *********************/static int      FS_storage;static int      HRS_index;voidInit_HR_Store(void){#if !defined(solaris2) && !defined(hpux10) && !defined(hpux11)    HRS_index = 0;#else    HRS_index = HRS_TYPE_MBUF;#endif    Init_HR_FileSys();    FS_storage = 0;             /* Start with file-based storage */}intGet_Next_HR_Store(void){    /*     * Fixed-style 'other' storage types     */    long_return = -1;    if (FS_storage == 0) {        ++HRS_index;        if (HRS_index <= HRS_TYPE_FIXED_MAX)            return HRS_index;        else {            FS_storage = 1;            HRS_index = 0;        }    }    /*     * File-based storage      */    HRS_index = Get_Next_HR_FileSys();    if (HRS_index >= 0)        return HRS_index + HRS_TYPE_FIXED_MAX;    return -1;}#ifdef linuxintlinux_mem(int mem_type, int size_or_used){    FILE           *fp;    char            buf[1024];    int             size = -1, free = -1, buffers = -1;    if ((fp = fopen("/proc/meminfo", "r")) == NULL)        return -1;    while (fgets(buf, sizeof(buf), fp) != NULL) {       if ((!strncmp(buf, "MemTotal:", 9) && (mem_type == HRS_TYPE_MEM || mem_type == HRS_TYPE_MBUF)) ||            (!strncmp(buf, "SwapTotal:", 10) && mem_type == HRS_TYPE_SWAP))            sscanf(buf, "%*s %d", &size);       if ((!strncmp(buf, "MemFree:", 8) && mem_type == HRS_TYPE_MEM) ||            (!strncmp(buf, "SwapFree:", 9) && mem_type == HRS_TYPE_SWAP))            sscanf(buf, "%*s %d", &free);       if ((!strncmp(buf, "Buffers:", 8) && mem_type == HRS_TYPE_MBUF))		sscanf(buf, "%*s %d", &buffers);    }    fclose(fp);    switch (mem_type) {        case HRS_TYPE_MBUF:            return (size_or_used == HRSTORE_SIZE ? size : buffers);        default:            return (size_or_used == HRSTORE_SIZE ? size : (size - free));    } /* switch */}#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 + -