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

📄 hr_network.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
字号:
/* *  Host Resources MIB - network device group implementation - hr_network.c * */#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include <net-snmp/data_access/interface.h>#if HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#ifdef hpux11#include <sys/mib.h>#include <netinet/mib_kern.h>#endif#include "host_res.h"#include "mibII/interfaces.h"#include "hr_network.h"        /*********************	 *	 *  Kernel & interface information,	 *   and internal forward declarations	 *	 *********************/void            Init_HR_Network(void);int             Get_Next_HR_Network(void);void            Save_HR_Network_Info(void);const char     *describe_networkIF(int);int             network_status(int);int             network_errors(int);int             header_hrnet(struct variable *, oid *, size_t *, int,                             size_t *, WriteMethod **);#define HRN_MONOTONICALLY_INCREASING        /*********************	 *	 *  Initialisation & common implementation functions	 *	 *********************/#define	HRNET_IFINDEX		1struct variable4 hrnet_variables[] = {    {HRNET_IFINDEX, ASN_INTEGER, RONLY, var_hrnet, 2, {1, 1}}};oid             hrnet_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 4 };voidinit_hr_network(void){    init_device[HRDEV_NETWORK] = Init_HR_Network;    next_device[HRDEV_NETWORK] = Get_Next_HR_Network;    save_device[HRDEV_NETWORK] = Save_HR_Network_Info;#ifdef HRN_MONOTONICALLY_INCREASING    dev_idx_inc[HRDEV_NETWORK] = 1;#endif    device_descr[HRDEV_NETWORK] = describe_networkIF;    device_status[HRDEV_NETWORK] = network_status;    device_errors[HRDEV_NETWORK] = network_errors;    REGISTER_MIB("host/hr_network", hrnet_variables, variable4,                 hrnet_variables_oid);}/* * header_hrnet(... * 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_hrnet(struct variable *vp,             oid * name,             size_t * length,             int exact, size_t * var_len, WriteMethod ** write_method){#define HRNET_ENTRY_NAME_LENGTH	11    oid             newname[MAX_OID_LEN];    int             net_idx;    int             result;    int             LowIndex = -1;    DEBUGMSGTL(("host/hr_network", "var_hrnet: "));    DEBUGMSGOID(("host/hr_network", name, *length));    DEBUGMSG(("host/hr_network", " %d\n", exact));    memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));    /*     * Find "next" net entry      */    Init_HR_Network();    for (;;) {        net_idx = Get_Next_HR_Network();        if (net_idx == -1)            break;        newname[HRNET_ENTRY_NAME_LENGTH] = net_idx;        result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);        if (exact && (result == 0)) {            LowIndex = net_idx;            break;        }        if (!exact && (result < 0) &&            (LowIndex == -1 || net_idx < LowIndex)) {            LowIndex = net_idx;#ifdef HRN_MONOTONICALLY_INCREASING            break;#endif        }    }    if (LowIndex == -1) {        DEBUGMSGTL(("host/hr_network", "... index out of range\n"));        return (MATCH_FAILED);    }    newname[HRNET_ENTRY_NAME_LENGTH] = LowIndex;    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_network", "... get net stats "));    DEBUGMSGOID(("host/hr_network", name, *length));    DEBUGMSG(("host/hr_network", "\n"));    return LowIndex;}        /*********************	 *	 *  System specific implementation functions	 *	 *********************/u_char         *var_hrnet(struct variable * vp,          oid * name,          size_t * length,          int exact, size_t * var_len, WriteMethod ** write_method){    int             net_idx;    net_idx = header_hrnet(vp, name, length, exact, var_len, write_method);    if (net_idx == MATCH_FAILED)        return NULL;    switch (vp->magic) {    case HRNET_IFINDEX:        long_return = net_idx & ((1 << HRDEV_TYPE_SHIFT) - 1);        return (u_char *) & long_return;    default:        DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrnet\n",                    vp->magic));    }    return NULL;}        /*********************	 *	 *  Internal implementation functions	 *	 *********************/#if defined( USING_IF_MIB_IFTABLE_IFTABLE_DATA_ACCESS_MODULE )static char     HRN_name[16];static netsnmp_interface_entry *HRN_ifnet;#define M_Interface_Scan_Next(a, b, c, d)	Interface_Scan_Next(a, b, c, d)#elif defined(hpux11)static char     HRN_name[MAX_PHYSADDR_LEN];static nmapi_phystat HRN_ifnet;#define M_Interface_Scan_Next(a, b, c, d)	Interface_Scan_Next(a, b, c)#else                           /* hpux11 */static char     HRN_name[16];#ifndef WIN32static struct ifnet HRN_ifnet;#endif /* WIN32 */#define M_Interface_Scan_Next(a, b, c, d)	Interface_Scan_Next(a, b, c, d)#endif#ifdef hpux11static char     HRN_savedName[MAX_PHYSADDR_LEN];#elsestatic char     HRN_savedName[16];#endifstatic u_short  HRN_savedFlags;static int      HRN_savedErrors;voidInit_HR_Network(void){#if !defined( solaris2 )    Interface_Scan_Init();#endif}intGet_Next_HR_Network(void){short    HRN_index;#if !defined( solaris2) && ! defined( WIN32 )    if (M_Interface_Scan_Next(&HRN_index, HRN_name, &HRN_ifnet, NULL) == 0)        HRN_index = -1;#else    HRN_index = -1;#endif    if (-1 == HRN_index)        return HRN_index;    return (HRDEV_NETWORK << HRDEV_TYPE_SHIFT) + HRN_index;}voidSave_HR_Network_Info(void){    strcpy(HRN_savedName, HRN_name);#if defined( USING_IF_MIB_IFTABLE_IFTABLE_DATA_ACCESS_MODULE )    HRN_savedFlags = HRN_ifnet->os_flags;    HRN_savedErrors = HRN_ifnet->stats.ierrors + HRN_ifnet->stats.oerrors;#elif defined( hpux11 )    HRN_savedFlags = HRN_ifnet.if_entry.ifOper;    HRN_savedErrors = HRN_ifnet.if_entry.ifInErrors +        HRN_ifnet.if_entry.ifOutErrors;#else                           /* hpux11 */#ifndef WIN32    HRN_savedFlags = HRN_ifnet.if_flags;    HRN_savedErrors = HRN_ifnet.if_ierrors + HRN_ifnet.if_oerrors;#endif /* WIN32 */#endif                          /* hpux11 */}const char     *describe_networkIF(int idx){    static char     string[1024];    snprintf(string, sizeof(string)-1, "network interface %s", HRN_savedName);    string[ sizeof(string)-1 ] = 0;    return string;}intnetwork_status(int idx){#ifndef WIN32#ifdef hpux11    if (HRN_savedFlags == LINK_UP)#else    if (HRN_savedFlags & IFF_UP)#endif        return 2;               /* running */    else        return 5;               /* down */#endif /* WIN32 */}intnetwork_errors(int idx){    return HRN_savedErrors;}

⌨️ 快捷键说明

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