📄 interfaces.c
字号:
long_return = 64000 * 30;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) 10000000;#endif } return (u_char *) & long_return; case IFPHYSADDRESS: Interface_Get_Ether_By_Index(interface, return_buf); *var_len = 6; if ((return_buf[0] == 0) && (return_buf[1] == 0) && (return_buf[2] == 0) && (return_buf[3] == 0) && (return_buf[4] == 0) && (return_buf[5] == 0)) *var_len = 0; return (u_char *) return_buf; case IFADMINSTATUS: long_return = ifnet.if_flags & IFF_UP ? 1 : 2; return (u_char *) & long_return; case IFOPERSTATUS: long_return = ifnet.if_flags & IFF_RUNNING ? 1 : 2; return (u_char *) & long_return; case IFLASTCHANGE:#if defined(STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC) && !(defined(freebsd2) && __FreeBSD_version < 199607) /* * XXX - SNMP's ifLastchange is time when op. status changed * * FreeBSD's if_lastchange is time when packet was input or output * * (at least in 2.1.0-RELEASE. Changed in later versions of the kernel?) */ /* * FreeBSD's if_lastchange before the 2.1.5 release is the time when * * a packet was last input or output. In the 2.1.5 and later releases, * * this is fixed, thus the 199607 comparison. */ if (ifnet.if_lastchange.tv_sec == 0 && ifnet.if_lastchange.tv_usec == 0) long_return = 0; else if (ifnet.if_lastchange.tv_sec < starttime.tv_sec) long_return = 0; else { long_return = (u_long) ((ifnet.if_lastchange.tv_sec - starttime.tv_sec) * 100 + (ifnet.if_lastchange.tv_usec - starttime.tv_usec) / 10000); }#else#if NO_DUMMY_VALUES return NULL;#endif long_return = 0; /* XXX */#endif return (u_char *) & long_return; case IFINOCTETS:#ifdef STRUCT_IFNET_HAS_IF_IBYTES long_return = (u_long) ifnet.if_ibytes;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) ifnet.if_ipackets * 308; /* XXX */#endif return (u_char *) & long_return; case IFINUCASTPKTS: { long_return = (u_long) ifnet.if_ipackets;#if STRUCT_IFNET_HAS_IF_IMCASTS long_return -= (u_long) ifnet.if_imcasts;#endif } return (u_char *) & long_return; case IFINNUCASTPKTS:#if STRUCT_IFNET_HAS_IF_IMCASTS long_return = (u_long) ifnet.if_imcasts;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFINDISCARDS:#if STRUCT_IFNET_HAS_IF_IQDROPS long_return = (u_long) ifnet.if_iqdrops;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFINERRORS: long_return = (u_long) ifnet.if_ierrors; return (u_char *) & long_return; case IFINUNKNOWNPROTOS:#if STRUCT_IFNET_HAS_IF_NOPROTO long_return = (u_long) ifnet.if_noproto;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFOUTOCTETS:#ifdef STRUCT_IFNET_HAS_IF_OBYTES long_return = (u_long) ifnet.if_obytes;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) ifnet.if_opackets * 308; /* XXX */#endif return (u_char *) & long_return; case IFOUTUCASTPKTS: { long_return = (u_long) ifnet.if_opackets;#if STRUCT_IFNET_HAS_IF_OMCASTS long_return -= (u_long) ifnet.if_omcasts;#endif } return (u_char *) & long_return; case IFOUTNUCASTPKTS:#if STRUCT_IFNET_HAS_IF_OMCASTS long_return = (u_long) ifnet.if_omcasts;#else#if NO_DUMMY_VALUES return NULL;#endif long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFOUTDISCARDS: long_return = ifnet.if_snd.ifq_drops; return (u_char *) & long_return; case IFOUTERRORS: long_return = ifnet.if_oerrors; return (u_char *) & long_return; case IFOUTQLEN: long_return = ifnet.if_snd.ifq_len; return (u_char *) & long_return; case IFSPECIFIC: *var_len = nullOidLen; return (u_char *) nullOid; default: DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n", vp->magic)); } return NULL;}#else /* hpux */u_char *var_ifEntry(struct variable *vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method){#if defined(hpux11) static nmapi_phystat ifnet;#else static struct ifnet ifnet;#endif register int interface;#if !defined(hpux11) static struct in_ifaddr in_ifaddrVar;#endif#if defined(hpux11) static char Name[MAX_PHYSADDR_LEN];#else static char Name[16];#endif register char *cp;#if STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC struct timeval now;#endif#if !defined(hpux11) struct nmparms hp_nmparms; static mib_ifEntry hp_ifEntry; int hp_fd; int hp_len = sizeof(hp_ifEntry);#endif interface = header_ifEntry(vp, name, length, exact, var_len, write_method); if (interface == MATCH_FAILED) return NULL;#if defined(hpux11) Interface_Scan_By_Index(interface, Name, &ifnet);#else Interface_Scan_By_Index(interface, Name, &ifnet, &in_ifaddrVar);#endif#if !defined(hpux11) /* * Additional information about the interfaces is available under * HP-UX through the network management interface '/dev/netman' */ hp_ifEntry.ifIndex = interface; hp_nmparms.objid = ID_ifEntry; hp_nmparms.buffer = (char *) &hp_ifEntry; hp_nmparms.len = &hp_len; if ((hp_fd = open("/dev/netman", O_RDONLY)) != -1) { if (ioctl(hp_fd, NMIOGET, &hp_nmparms) != -1) { close(hp_fd); } else { close(hp_fd); hp_fd = -1; /* failed */ } }#endif switch (vp->magic) { case IFINDEX: long_return = interface; return (u_char *) & long_return; case IFDESCR:#if defined(hpux11) cp = ifnet.if_entry.ifDescr;#else if (hp_fd != -1) cp = hp_ifEntry.ifDescr; else cp = Name;#endif *var_len = strlen(cp); return (u_char *) cp; case IFTYPE:#if defined(hpux11) long_return = ifnet.if_entry.ifType;#else if (hp_fd != -1) long_return = hp_ifEntry.ifType; else long_return = 1; /* OTHER */#endif return (u_char *) & long_return; case IFMTU:{#if defined(hpux11) long_return = (long) ifnet.if_entry.ifMtu;#else long_return = (long) ifnet.if_mtu;#endif return (u_char *) & long_return; } case IFSPEED:#if defined(hpux11) long_return = ifnet.if_entry.ifSpeed;#else if (hp_fd != -1) long_return = hp_ifEntry.ifSpeed; else long_return = (u_long) 1; /* OTHER */#endif return (u_char *) & long_return; case IFPHYSADDRESS:#if defined(hpux11) *var_len = ifnet.if_entry.ifPhysAddress.o_length; return (u_char *) ifnet.if_entry.ifPhysAddress.o_bytes;#else Interface_Get_Ether_By_Index(interface, return_buf); *var_len = 6; if ((return_buf[0] == 0) && (return_buf[1] == 0) && (return_buf[2] == 0) && (return_buf[3] == 0) && (return_buf[4] == 0) && (return_buf[5] == 0)) *var_len = 0; return (u_char *) return_buf;#endif case IFADMINSTATUS:#if defined(hpux11) long_return = ifnet.if_entry.ifAdmin;#else long_return = ifnet.if_flags & IFF_UP ? 1 : 2;#endif return (u_char *) & long_return; case IFOPERSTATUS:#if defined(hpux11) long_return = ifnet.if_entry.ifOper;#else long_return = ifnet.if_flags & IFF_RUNNING ? 1 : 2;#endif return (u_char *) & long_return; case IFLASTCHANGE:#if defined(hpux11) long_return = ifnet.if_entry.ifLastChange;#else if (hp_fd != -1) long_return = hp_ifEntry.ifLastChange; else long_return = 0; /* XXX */#endif return (u_char *) & long_return; case IFINOCTETS:#if defined(hpux11) long_return = ifnet.if_entry.ifInOctets;#else if (hp_fd != -1) long_return = hp_ifEntry.ifInOctets; else long_return = (u_long) ifnet.if_ipackets * 308; /* XXX */#endif return (u_char *) & long_return; case IFINUCASTPKTS:#if defined(hpux11) long_return = ifnet.if_entry.ifInUcastPkts;#else if (hp_fd != -1) long_return = hp_ifEntry.ifInUcastPkts; else long_return = (u_long) ifnet.if_ipackets;#endif return (u_char *) & long_return; case IFINNUCASTPKTS:#if defined(hpux11) long_return = ifnet.if_entry.ifInNUcastPkts;#else if (hp_fd != -1) long_return = hp_ifEntry.ifInNUcastPkts; else long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFINDISCARDS:#if defined(hpux11) long_return = ifnet.if_entry.ifInDiscards;#else if (hp_fd != -1) long_return = hp_ifEntry.ifInDiscards; else long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFINERRORS:#if defined(hpux11) long_return = ifnet.if_entry.ifInErrors;#else long_return = ifnet.if_ierrors;#endif return (u_char *) & long_return; case IFINUNKNOWNPROTOS:#if defined(hpux11) long_return = ifnet.if_entry.ifInUnknownProtos;#else if (hp_fd != -1) long_return = hp_ifEntry.ifInUnknownProtos; else long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFOUTOCTETS:#if defined(hpux11) long_return = ifnet.if_entry.ifOutOctets;#else if (hp_fd != -1) long_return = hp_ifEntry.ifOutOctets; else long_return = (u_long) ifnet.if_opackets * 308; /* XXX */#endif return (u_char *) & long_return; case IFOUTUCASTPKTS:#if defined(hpux11) long_return = ifnet.if_entry.ifOutUcastPkts;#else if (hp_fd != -1) long_return = hp_ifEntry.ifOutUcastPkts; else long_return = (u_long) ifnet.if_opackets;#endif return (u_char *) & long_return; case IFOUTNUCASTPKTS:#if defined(hpux11) long_return = ifnet.if_entry.ifOutNUcastPkts;#else if (hp_fd != -1) long_return = hp_ifEntry.ifOutNUcastPkts; else long_return = (u_long) 0; /* XXX */#endif return (u_char *) & long_return; case IFOUTDISCARDS:#if defined(hpux11) long_return = ifnet.if_entry.ifOutDiscards;#else long_return = ifnet.if_snd.ifq_drops;#endif return (u_char *) & long_return; case IFOUTERRORS:#if defined(hpux11) long_return = ifnet.if_entry.ifOutErrors;#else long_return = ifnet.if_oerrors;#endif return (u_char *) & long_return; case IFOUTQLEN:#if defined(hpux11) long_return = ifnet.if_entry.ifOutQlen;#else long_return = ifnet.if_snd.ifq_len;#endif return (u_char *) & long_return; case IFSPECIFIC: *var_len = nullOidLen; return (u_char *) nullOid; default: DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n", vp->magic)); } return NULL;}#endif /* hpux */#else /* solaris2 */static intIF_cmp(void *addr, void *ep){ DEBUGMSGTL(("mibII/interfaces", "... IF_cmp %d %d\n", ((mib2_ifEntry_t *) ep)->ifIndex, ((mib2_ifEntry_t *) addr)->ifIndex)); if (((mib2_ifEntry_t *) ep)->ifIndex == ((mib2_ifEntry_t *) addr)->ifIndex) return (0); else return (1);}u_char *var_ifEntry(struct variable * vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method){ int interface; mib2_ifEntry_t ifstat; interface = header_ifEntry(vp, name, length, exact, var_len, write_method); if (interface == MATCH_FAILED) return NULL; if (getMibstat(MIB_INTERFACES, &ifstat, sizeof(mib2_ifEntry_t), GET_EXACT, &IF_cmp, &interface) != 0) { DEBUGMSGTL(("mibII/interfaces", "... no mib stats\n")); return NULL; } switch (vp->magic) { case IFINDEX: long_return = ifstat.ifIndex; return (u_char *) & long_return; case IFDESCR: *var_len = ifstat.ifDescr.o_length; (void) memcpy(return_buf, ifstat.ifDescr.o_bytes, *var_len); return (u_char *) return_buf; case IFTYPE: long_return = (u_long) ifstat.ifType;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -