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

📄 hr_network.c

📁 ucd-snmp源代码
💻 C
字号:
/* *  Host Resources MIB - network device group implementation - hr_network.c * */#include <config.h>#ifdef hpux11#include <sys/mib.h>#include <netinet/mib_kern.h>#endif#if HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#ifdef dynix#if HAVE_SYS_SELECT_H#include <sys/select.h>#endif#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 };void init_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	 *	 *********************/#ifndef solaris2static short		HRN_index;#endif#ifdef hpux11static 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];static struct ifnet	HRN_ifnet;#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){#ifndef solaris2   Interface_Scan_Init();#endif}intGet_Next_HR_Network (void){#ifndef solaris2    if (M_Interface_Scan_Next( &HRN_index, HRN_name, &HRN_ifnet, NULL))        return ( HRDEV_NETWORK << HRDEV_TYPE_SHIFT ) + HRN_index;    else#endif        return -1;}voidSave_HR_Network_Info (void){   strcpy( HRN_savedName, HRN_name);#ifdef hpux11   HRN_savedFlags  = HRN_ifnet.if_entry.ifOper;   HRN_savedErrors = HRN_ifnet.if_entry.ifInErrors +	HRN_ifnet.if_entry.ifOutErrors;#else	/* hpux11 */   HRN_savedFlags  = HRN_ifnet.if_flags;   HRN_savedErrors = HRN_ifnet.if_ierrors + HRN_ifnet.if_oerrors;#endif	/* hpux11 */}const char *describe_networkIF(int idx){    static char string[100];    sprintf( string, "network interface %s", HRN_savedName );    return string;}intnetwork_status(int idx){#ifdef hpux11    if ( HRN_savedFlags == LINK_UP )#else    if ( HRN_savedFlags & IFF_UP )#endif	return 2;		/* running */    else	return 5;		/* down */}intnetwork_errors(int idx){    return HRN_savedErrors;}

⌨️ 快捷键说明

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