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

📄 ipv6.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 5 页
字号:
            if (if_getifnet(interface, &ifnet) < 0)                break;#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)            ifa = (caddr_t) TAILQ_FIRST(&ifnet.if_addrhead);#else# if defined(__NetBSD__) || defined(__OpenBSD__)            ifa = (caddr_t) TAILQ_FIRST(&ifnet.if_addrlist);# else            ifa = (caddr_t) ifnet.if_addrlist;# endif#endif            while (ifa) {                klookup((u_long) ifa, (char *) &ifaddr, sizeof(ifaddr));                klookup((u_long) ifaddr.ifa_addr, (char *) &sdl,                        sizeof(sdl));                if (sdl.sdl_family == AF_LINK) {                    if (sizeof(sdl.sdl_data) < sdl.sdl_nlen + sdl.sdl_alen) {                        ERROR_MSG("sdl_alen too long for interface\n");                        break;                    }                    *var_len = sdl.sdl_alen;                    return (u_char *) (sdl.sdl_data + sdl.sdl_nlen);                }#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)                ifa = (caddr_t) TAILQ_NEXT(&ifaddr, ifa_link);#else# if defined(__NetBSD__) || defined(__OpenBSD__)                ifa = (caddr_t) TAILQ_NEXT(&ifaddr, ifa_list);# else                ifa = (caddr_t) ifaddr.ifa_next;# endif#endif            }            /*             * no physical address found              */            *var_len = 0;            return NULL;        }    case IPV6IFADMSTATUS:        {            struct ifnet    ifnet;            if (if_getifnet(interface, &ifnet) < 0)                break;            long_return = (ifnet.if_flags & IFF_RUNNING) ? 1 : 2;            return (u_char *) & long_return;        }    case IPV6IFOPERSTATUS:        {            struct ifnet    ifnet;            if (if_getifnet(interface, &ifnet) < 0)                break;            long_return = (ifnet.if_flags & IFF_UP) ? 1 : 2;            return (u_char *) & long_return;        }#if TRUST_IFLASTCHANGE         /*untrustable value returned... */    case IPV6IFLASTCHANGE:        {            struct timeval  lastchange;            struct timeval  now;            int             gotanswer;            gotanswer = 0;            lastchange.tv_sec = lastchange.tv_usec = 0;#ifdef HAVE_NET_IF_MIB_H            if (!gotanswer) {                struct ifmibdata ifmd;                if (if_getifmibdata(interface, &ifmd) < 0);                else {                    lastchange = ifmd.ifmd_data.ifi_lastchange;                    gotanswer++;                }            }#endif#ifdef STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC            if (!gotanswer) {                struct ifnet    ifnet;                if (if_getifnet(interface, &ifnet) < 0);                else {                    lastchange = ifnet.if_lastchange;                    gotanswer++;                }            }#endif            DEBUGMSGTL(("mibII/ipv6", "lastchange = { %d.%06d }\n",                        lastchange.tv_sec, lastchange.tv_usec));            if (lastchange.tv_sec == 0 && lastchange.tv_usec == 0)                long_return = 0;            else {                gettimeofday(&now, (struct timezone *) NULL);                long_return =                    (u_long) ((now.tv_sec - lastchange.tv_sec) * 100);                long_return +=                    (u_long) ((now.tv_usec - lastchange.tv_usec) / 10000);            }            return (u_char *) & long_return;        }#endif  /* TRUST_IFLASTCHANGE */#ifdef SIOCGIFSTAT_IN6    case IPV6IFSTATSINRCVS:    case IPV6IFSTATSINHDRERRS:    case IPV6IFSTATSTOOBIGERRS:    case IPV6IFSTATSINNOROUTES:    case IPV6IFSTATSINADDRERRS:    case IPV6IFSTATSINUNKNOWPROTS:    case IPV6IFSTATSINTRUNCATPKTS:    case IPV6IFSTATSINDISCARDS:    case IPV6IFSTATSINDELIVERS:    case IPV6IFSTATSOUTFORWDATAS:    case IPV6IFSTATSOUTREQS:    case IPV6IFSTATSOUTDISCARDS:    case IPV6IFSTATSOUTFRAGOKS:    case IPV6IFSTATSOUTFRAGFAILS:    case IPV6IFSTATSOUTFRAGCREATS:    case IPV6IFSTATSOUTREASMREQS:    case IPV6IFSTATSOUTREASMOKS:    case IPV6IFSTATSOUTREASMFAILS:    case IPV6IFSTATSINMCASTPKTS:    case IPV6IFSTATSOUTMCASTPKTS:        {            struct in6_ifstat *ifs6;            struct in6_ifreq ifr;            int             s;            memset(&ifr, 0, sizeof(ifr));            strncpy(ifr.ifr_name, if_getname(interface),                    sizeof(ifr.ifr_name));            if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)                break;            if (ioctl(s, SIOCGIFSTAT_IN6, (caddr_t) & ifr) < 0) {                close(s);                break;            }            close(s);            ifs6 = &ifr.ifr_ifru.ifru_stat;            switch (vp->magic) {            case IPV6IFSTATSINRCVS:                long_return = ifs6->ifs6_in_receive;                break;            case IPV6IFSTATSINHDRERRS:                long_return = ifs6->ifs6_in_hdrerr;                break;            case IPV6IFSTATSTOOBIGERRS:                long_return = ifs6->ifs6_in_toobig;                break;            case IPV6IFSTATSINNOROUTES:                long_return = ifs6->ifs6_in_noroute;                break;            case IPV6IFSTATSINADDRERRS:                long_return = ifs6->ifs6_in_addrerr;                break;            case IPV6IFSTATSINUNKNOWPROTS:                long_return = ifs6->ifs6_in_protounknown;                break;            case IPV6IFSTATSINTRUNCATPKTS:                long_return = ifs6->ifs6_in_truncated;                break;            case IPV6IFSTATSINDISCARDS:                long_return = ifs6->ifs6_in_discard;                break;            case IPV6IFSTATSINDELIVERS:                long_return = ifs6->ifs6_in_deliver;                break;            case IPV6IFSTATSOUTFORWDATAS:                long_return = ifs6->ifs6_out_forward;                break;            case IPV6IFSTATSOUTREQS:                long_return = ifs6->ifs6_out_request;                break;            case IPV6IFSTATSOUTDISCARDS:                long_return = ifs6->ifs6_out_discard;                break;            case IPV6IFSTATSOUTFRAGOKS:                long_return = ifs6->ifs6_out_fragok;                break;            case IPV6IFSTATSOUTFRAGFAILS:                long_return = ifs6->ifs6_out_fragfail;                break;            case IPV6IFSTATSOUTFRAGCREATS:                long_return = ifs6->ifs6_out_fragcreat;                break;            case IPV6IFSTATSOUTREASMREQS:                long_return = ifs6->ifs6_reass_reqd;                break;            case IPV6IFSTATSOUTREASMOKS:                long_return = ifs6->ifs6_reass_ok;                break;            case IPV6IFSTATSOUTREASMFAILS:                long_return = ifs6->ifs6_reass_fail;                break;            case IPV6IFSTATSINMCASTPKTS:                long_return = ifs6->ifs6_in_mcast;                break;            case IPV6IFSTATSOUTMCASTPKTS:                long_return = ifs6->ifs6_out_mcast;                break;            default:                return NULL;            }            return (u_char *) & long_return;        }#endif    default:        break;    }    return NULL;#endif}u_char         *var_icmpv6Entry(register struct variable * vp,                oid * name,                size_t * length,                int exact, size_t * var_len, WriteMethod ** write_method){#ifndef HAVE_IF_NAMEINDEX    return NULL;#else    int             interface;    int             max;    max = if_maxifindex();    if (max < 0)        return NULL;    if (header_ipv6_scan        (vp, name, length, exact, var_len, write_method, 1, max)        == MATCH_FAILED) {        return NULL;    }    interface = name[*length - 1];    DEBUGMSGTL(("mibII/ipv6", "interface: %d(%s)\n",                interface, if_getname(interface)));    if (interface >= max)        return NULL;    switch (vp->magic) {#ifdef SIOCGIFSTAT_ICMP6    case IPV6IFICMPINMSG:    case IPV6IFICMPINERRORS:    case IPV6IFICMPINDSTUNRCHS:    case IPV6IFICMPINADMPROHS:    case IPV6IFICMPINTIMEXCDS:    case IPV6IFICMPINPARMPROBS:    case IPV6IFICMPINPKTTOOBIGS:    case IPV6IFICMPINECHOS:    case IPV6IFICMPINECHOREPS:    case IPV6IFICMPINRTRSLICITS:    case IPV6IFICMPINRTRADVS:    case IPV6IFICMPINNBRSLICITS:    case IPV6IFICMPINNBRADVS:    case IPV6IFICMPINREDIRECTS:    case IPV6IFICMPINGRPMEQERYS:    case IPV6IFICMPINGRPMERSPS:    case IPV6IFICMPINGRPMEREDCS:    case IPV6IFICMPOUTMSG:    case IPV6IFICMPOUTERRORS:    case IPV6IFICMPOUTDSTUNRCHS:    case IPV6IFICMPOUTADMPROHS:    case IPV6IFICMPOUTTIMEXCDS:    case IPV6IFICMPOUTPARMPROBS:    case IPV6IFICMPOUTPKTTOOBIGS:    case IPV6IFICMPOUTECHOS:    case IPV6IFICMPOUTECHOREPS:    case IPV6IFICMPOUTRTRSLICITS:    case IPV6IFICMPOUTRTRADVS:    case IPV6IFICMPOUTNBRSLICITS:    case IPV6IFICMPOUTNBRADVS:    case IPV6IFICMPOUTREDIRECTS:    case IPV6IFICMPOUTGRPMEQERYS:    case IPV6IFICMPOUTGRPMERSPS:    case IPV6IFICMPOUTGRPMEREDCS:        {            struct icmp6_ifstat *ifs6;            struct in6_ifreq ifr;            int             s;            memset(&ifr, 0, sizeof(ifr));            strncpy(ifr.ifr_name, if_getname(interface),                    sizeof(ifr.ifr_name));            if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)                break;            if (ioctl(s, SIOCGIFSTAT_ICMP6, (caddr_t) & ifr) < 0) {                close(s);                break;            }            close(s);            ifs6 = &ifr.ifr_ifru.ifru_icmp6stat;            switch (vp->magic) {            case IPV6IFICMPINMSG:                long_return = ifs6->ifs6_in_msg;                break;            case IPV6IFICMPINERRORS:                long_return = ifs6->ifs6_in_error;                break;            case IPV6IFICMPINDSTUNRCHS:                long_return = ifs6->ifs6_in_dstunreach;                break;            case IPV6IFICMPINADMPROHS:                long_return = ifs6->ifs6_in_adminprohib;                break;            case IPV6IFICMPINTIMEXCDS:                long_return = ifs6->ifs6_in_timeexceed;                break;            case IPV6IFICMPINPARMPROBS:                long_return = ifs6->ifs6_in_paramprob;                break;            case IPV6IFICMPINPKTTOOBIGS:                long_return = ifs6->ifs6_in_pkttoobig;                break;            case IPV6IFICMPINECHOS:                long_return = ifs6->ifs6_in_echo;                break;            case IPV6IFICMPINECHOREPS:                long_return = ifs6->ifs6_in_echoreply;                break;            case IPV6IFICMPINRTRSLICITS:                long_return = ifs6->ifs6_in_routersolicit;                break;            case IPV6IFICMPINRTRADVS:                long_return = ifs6->ifs6_in_routeradvert;                break;            case IPV6IFICMPINNBRSLICITS:                long_return = ifs6->ifs6_in_neighborsolicit;                break;            case IPV6IFICMPINNBRADVS:                long_return = ifs6->ifs6_in_neighboradvert;                break;            case IPV6IFICMPINREDIRECTS:                long_return = ifs6->ifs6_in_redirect;                break;            case IPV6IFICMPINGRPMEQERYS:                long_return = ifs6->ifs6_in_mldquery;                break;            case IPV6IFICMPINGRPMERSPS:                long_return = ifs6->ifs6_in_mldreport;                break;            case IPV6IFICMPINGRPMEREDCS:                long_return = ifs6->ifs6_in_mlddone;                break;            case IPV6IFICMPOUTMSG:                long_return = ifs6->ifs6_out_msg;                break;            case IPV6IFICMPOUTERRORS:                long_return = ifs6->ifs6_out_error;                break;            case IPV6IFICMPOUTDSTUNRCHS:                long_return = ifs6->ifs6_out_dstunreach;                break;            case IPV6IFICMPOUTADMPROHS:                long_return = ifs6->ifs6_out_adminprohib;                break;            case IPV6IFICMPOUTTIMEXCDS:                long_return = ifs6->ifs6_out_timeexceed;                break;            case IPV6IFICMPOUTPARMPROBS:                long_return = ifs6->ifs6_out_paramprob;                break;            case IPV6IFICMPOUTPKTTOOBIGS:                long_return = ifs6->ifs6_out_pkttoobig;                break;            case IPV6IFICMPOUTECHOS:                long_return = ifs6->ifs6_out_echo;                break;            case IPV6IFICMPOUTECHOREPS:                long_return = ifs6->ifs6_out_echoreply;                break;            case IPV6IFICMPOUTRTRSLICITS:                long_return = ifs6->ifs6_out_routersolicit;                break;            case IPV6IFICMPOUTRTRADVS:                long_return = ifs6->ifs6_out_routeradvert;                break;            case IPV6IFICMPOUTNBRSLICITS:                long_return = ifs6->ifs6_out_neighborsolicit;                break;            case IPV6IFICMPOUTNBRADVS:                long_return = ifs6->ifs6_out_neighboradvert;                break;            case IPV6IFICMPOUTREDIRECTS:                long_return = ifs6->ifs6_out_redirect;                break;            case IPV6IFICMPOUTGRPMEQERYS:                long_return = ifs6->ifs6_out_mldquery;                break;            case IPV6IFICMPOUTGRPMERSPS:                long_return = ifs6->ifs6_out_mldreport;                break;            case IPV6IFICMPOUTGRPMEREDCS:                long_return = ifs6->ifs6_out_mlddone;                break;            default:                return NULL;            }            return (u_char *) & long_return;        }#endif

⌨️ 快捷键说明

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