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

📄 interfaces.c

📁 一个学习SNMP项目:tmoerlan.
💻 C
📖 第 1 页 / 共 5 页
字号:
                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 + -