📄 ipv6.c
字号:
/* * IP MIB group implementation - ipv6.c * */#include <net-snmp/net-snmp-config.h>#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL)#define _KERNEL 1#define _I_DEFINED_KERNEL#endif#include <sys/types.h>#include <sys/param.h>#include <sys/socket.h>#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)# if HAVE_SYS_SOCKETVAR_H# include <sys/socketvar.h># endif#endif#if STDC_HEADERS#include <string.h>#include <stdlib.h>#else#if HAVE_STDLIB_H#include <stdlib.h>#endif#endif#if HAVE_UNISTD_H#include <unistd.h>#endif#if HAVE_SYS_IOCTL_H#include <sys/ioctl.h>#endif#if HAVE_NETINET_IN_H#include <netinet/in.h>#endif#if HAVE_SYS_SYSCTL_H#ifdef _I_DEFINED_KERNEL#undef _KERNEL#endif#include <sys/sysctl.h>#ifdef _I_DEFINED_KERNEL#define _KERNEL 1#endif#endif#if HAVE_SYS_SYSMP_H#include <sys/sysmp.h>#endif#if HAVE_SYS_TCPIPSTATS_H#include <sys/tcpipstats.h>#endif#include <net/if.h>#if HAVE_NET_IF_VAR_H#include <net/if_var.h>#endif#if HAVE_NET_IF_DL_H#include <net/if_dl.h>#endif#ifdef HAVE_NET_IF_MIB_H#include <net/if_mib.h>#endif#ifdef _I_DEFINED_KERNEL#undef _KERNEL#endif#include <netinet/in_systm.h>#if HAVE_SYS_HASHING_H#include <sys/hashing.h>#endif#if HAVE_SYS_SOCKIO_H#include <sys/sockio.h>#endif#if HAVE_NETINET6_IN6_VAR_H#include <netinet6/in6_var.h>#endif#include <netinet/ip6.h>#if HAVE_NETINET_IP_VAR_H# include <netinet/ip_var.h>#endif#if HAVE_NETINET6_IP6_VAR_H# include <netinet6/ip6_var.h>#endif#include <net/route.h>#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)# if HAVE_NETINET_IN_PCB_H# include <netinet/in_pcb.h># endif#endif#if HAVE_NETINET6_IN6_PCB_H# include <netinet6/in6_pcb.h>#endif#if HAVE_NETINET6_TCP6_H# define TCP6#endif#ifndef TCP6# if HAVE_NETINET_TCP_H# include <netinet/tcp.h># endif# if HAVE_NETINET_TCP_TIMER_H# include <netinet/tcp_timer.h># endif# if HAVE_NETINET_TCP_VAR_H# include <netinet/tcp_var.h># endif# if HAVE_NETINET_TCP_FSM_H# include <netinet/tcp_fsm.h># endif#endif#if HAVE_NETINET6_TCP6_H# include <netinet6/tcp6.h>#endif#if HAVE_NETINET6_TCP6_TIMER_H#include <netinet6/tcp6_timer.h>#endif#if HAVE_NETINET6_TCP6_VAR_H#include <netinet6/tcp6_var.h>#endif#if HAVE_NETINET6_TCP6_FSM_H#include <netinet6/tcp6_fsm.h>#endif#if HAVE_INET_MIB2_H#include <inet/mib2.h>#endif#ifdef HAVE_SYSLOG_H#include <syslog.h>#endif#ifdef MIB_IPCOUNTER_SYMBOL#include <sys/mib.h>#include <netinet/mib_kern.h>#endif /* MIB_IPCOUNTER_SYMBOL */#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include <net-snmp/agent/auto_nlist.h>#include "kernel.h"#include "util_funcs.h"#include "ipv6.h"#include "interfaces.h"static int header_ipv6__P((register struct variable *, oid *, size_t *, int, size_t *, WriteMethod **));static int header_ipv6_scan__P((register struct variable *, oid *, size_t *, int, size_t *, WriteMethod **, int, int));static int if_initialize __P((void));static int if_maxifindex __P((void));static char *if_getname __P((int));#ifdef notusedstatic int if_getindex __P((const char *));#endifstruct variable3 ipv6_variables[] = { {IPV6FORWARDING, ASN_INTEGER, RONLY, var_ipv6, 1, {1}}, {IPV6DEFAULTHOPLIMIT, ASN_INTEGER, RONLY, var_ipv6, 1, {2}}, {IPV6INTERFACES, ASN_GAUGE, RONLY, var_ipv6, 1, {3}}, {IPV6IFTBLLASTCHG, ASN_TIMETICKS, RONLY, var_ipv6, 1, {4}}, {IPV6IFDESCR, ASN_OCTET_STR, RONLY, var_ifv6Entry, 3, {5, 1, 2}}, {IPV6IFLOWLAYER, ASN_OBJECT_ID, RONLY, var_ifv6Entry, 3, {5, 1, 3}}, {IPV6IFEFFECTMTU, ASN_UNSIGNED, RONLY, var_ifv6Entry, 3, {5, 1, 4}}, {IPV6IFREASMMAXSIZE, ASN_UNSIGNED, RONLY, var_ifv6Entry, 3, {5, 1, 5}}, {IPV6IFTOKEN, ASN_OCTET_STR, RONLY, var_ifv6Entry, 3, {5, 1, 6}}, {IPV6IFTOKENLEN, ASN_INTEGER, RONLY, var_ifv6Entry, 3, {5, 1, 7}}, {IPV6IFPHYSADDRESS, ASN_OCTET_STR, RONLY, var_ifv6Entry, 3, {5, 1, 8}}, {IPV6IFADMSTATUS, ASN_INTEGER, RONLY, var_ifv6Entry, 3, {5, 1, 9}}, {IPV6IFOPERSTATUS, ASN_INTEGER, RONLY, var_ifv6Entry, 3, {5, 1, 10}}, {IPV6IFLASTCHANGE, ASN_TIMETICKS, RONLY, var_ifv6Entry, 3, {5, 1, 11}}, {IPV6IFSTATSINRCVS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 1}}, {IPV6IFSTATSINHDRERRS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 2}}, {IPV6IFSTATSTOOBIGERRS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 3}}, {IPV6IFSTATSINNOROUTES, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 4}}, {IPV6IFSTATSINADDRERRS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 5}}, {IPV6IFSTATSINUNKNOWPROTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 6}}, {IPV6IFSTATSINTRUNCATPKTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 7}}, {IPV6IFSTATSINDISCARDS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 8}}, {IPV6IFSTATSINDELIVERS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 9}}, {IPV6IFSTATSOUTFORWDATAS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 10}}, {IPV6IFSTATSOUTREQS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 11}}, {IPV6IFSTATSOUTDISCARDS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 12}}, {IPV6IFSTATSOUTFRAGOKS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 13}}, {IPV6IFSTATSOUTFRAGFAILS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 14}}, {IPV6IFSTATSOUTFRAGCREATS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 15}}, {IPV6IFSTATSOUTREASMREQS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 16}}, {IPV6IFSTATSOUTREASMOKS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 17}}, {IPV6IFSTATSOUTREASMFAILS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 18}}, {IPV6IFSTATSINMCASTPKTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 19}}, {IPV6IFSTATSOUTMCASTPKTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 20}},#if 0 {IPV6ADDRPREFIXONLINKFLG, INTEGER, RONLY, var_ipv6AddrEntry, 3, {7, 1, 3}}, {IPV6ADDRPREFIXAUTONOMOUSFLAG, INTEGER, RONLY, var_ipv6AddrEntry, 3, {7, 1, 4}}, {IPV6ADDRPREFIXADVPREFERLIFE, UNSIGNED32, RONLY, var_ipv6AddrEntry, 3, {7, 1, 5}}, {IPV6ADDRPREFIXVALIDLIFE, UNSIGNED32, RONLY, var_ipv6AddrEntry, 3, {7, 1, 6}}, {IPV6ADDRPFXLEN, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 2}}, {IPV6ADDRTYPE, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 3}}, {IPV6ADDRANYCASTFLAG, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 4}}, {IPV6ADDRSTATUS, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 5}}, {IPV6ROUTEIFINDEX, IpV6IFINDEX, RONLY, var_ipv6RouteEntry, 3, {11, 1, 4}}, {IPV6ROUTENEXTHOP, IpV6ADDRESS, RONLY, var_ipv6RouteEntry, 3, {11, 1, 5}}, {IPV6ROUTETYPE, INTEGER, RONLY, var_ipv6RouteEntry, 3, {11, 1, 6}}, {IPV6ROUTEPROTOCOL, INTEGER, RONLY, var_ipv6RouteEntry, 3, {11, 1, 7}}, {IPV6ROUTEPOLICY, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3, {11, 1, 8}}, {IPV6ROUTEAGE, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3, {11, 1, 9}}, {IPV6ROUTENEXTHOPRDI, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3, {11, 1, 10}}, {IPV6ROUTEMETRIC, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3, {11, 1, 11}}, {IPV6ROUTEWEIGHT, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3, {11, 1, 12}}, {IPV6ROUTEINFO, OBJID, RONLY, var_ipv6RouteEntry, 3, {11, 1, 13}}, {IPV6ROUTEVALID, INTEGER, RONLY, var_ipv6RouteEntry, 3, {11, 1, 14}}, {IPV6NETTOMEDIAPHYADDR, STRING, RONLY, var_ndpEntry, 3, {12, 1, 2}}, {IPV6NETTOMEDIATYPE, INTEGER, RONLY, var_ndpEntry, 3, {12, 1, 3}}, {IPV6NETTOMEDIASTATE, INTEGER, RONLY, var_ndpEntry, 3, {12, 1, 4}}, {IPV6NETTOMEDIALASTUPDATE, TIMETICKS, RONLY, var_ndpEntry, 3, {12, 1, 5}}, {IPV6NETTOMEDIAVALID, INTEGER, RONLY, var_ndpEntry, 3, {12, 1, 6}},#endif};oid ipv6_variables_oid[] = { SNMP_OID_MIB2, 55, 1 };#if 0config_load_mib(MIB .55 .1, 8, ipv6_variables) config_add_mib(IPV6 - TC) config_add_mib(IPV6 - MIB)#endif struct variable3 ipv6icmp_variables[] = { {IPV6IFICMPINMSG, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 1}}, {IPV6IFICMPINERRORS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 2}}, {IPV6IFICMPINDSTUNRCHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 3}}, {IPV6IFICMPINADMPROHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 4}}, {IPV6IFICMPINTIMEXCDS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 5}}, {IPV6IFICMPINPARMPROBS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 6}}, {IPV6IFICMPINPKTTOOBIGS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 7}}, {IPV6IFICMPINECHOS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 8}}, {IPV6IFICMPINECHOREPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 9}}, {IPV6IFICMPINRTRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 10}}, {IPV6IFICMPINRTRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 11}}, {IPV6IFICMPINNBRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 12}}, {IPV6IFICMPINNBRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 13}}, {IPV6IFICMPINREDIRECTS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 14}}, {IPV6IFICMPINGRPMEQERYS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 15}}, {IPV6IFICMPINGRPMERSPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 16}}, {IPV6IFICMPINGRPMEREDCS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 17}}, {IPV6IFICMPOUTMSG, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 18}}, {IPV6IFICMPOUTERRORS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 19}}, {IPV6IFICMPOUTDSTUNRCHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 20}}, {IPV6IFICMPOUTADMPROHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 21}}, {IPV6IFICMPOUTTIMEXCDS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 22}}, {IPV6IFICMPOUTPARMPROBS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 23}}, {IPV6IFICMPOUTPKTTOOBIGS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 24}}, {IPV6IFICMPOUTECHOS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 25}}, {IPV6IFICMPOUTECHOREPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 26}}, {IPV6IFICMPOUTRTRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 27}}, {IPV6IFICMPOUTRTRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 28}}, {IPV6IFICMPOUTNBRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 29}}, {IPV6IFICMPOUTNBRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 30}}, {IPV6IFICMPOUTREDIRECTS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 31}}, {IPV6IFICMPOUTGRPMEQERYS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 32}}, {IPV6IFICMPOUTGRPMERSPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 33}}, {IPV6IFICMPOUTGRPMEREDCS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3, {1, 1, 34}} };oid ipv6icmp_variables_oid[] = { 1, 3, 6, 1, 2, 1, 56, 1 };#if 0config_load_mib(MIB .56 .1, 8, ipv6icmp_variables) config_add_mib(IPV6 - ICMP - MIB)#endif struct variable2 ipv6udp_variables[] = { {IPV6UDPLOCALADDRESS, ASN_OCTET_STR, RONLY, var_udp6, 2, {1, 1}}, {IPV6UDPLOCALPORT, ASN_INTEGER, RONLY, var_udp6, 2, {1, 2}}, {IPV6UDPIFINDEX, ASN_INTEGER, RONLY, var_udp6, 2, {1, 3}} };oid ipv6udp_variables_oid[] = { 1, 3, 6, 1, 2, 1, 7, 6 };#if 0config_load_mib(1.3 .6 .1 .3 .87 .1, 7, ipv6udp_variables) config_add_mib(IPV6 - UDP - MIB)#endif struct variable2 ipv6tcp_variables[] = { {IPV6TCPLOCALADDR, ASN_OCTET_STR, RONLY, var_tcp6, 2, {1, 1}}, {IPV6TCPLOCALPORT, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 2}}, {IPV6TCPREMOTEADDR, ASN_OCTET_STR, RONLY, var_tcp6, 2, {1, 3}}, {IPV6TCPREMOTEPORT, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 4}}, {IPV6TCPIFINDEX, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 5}}, {IPV6TCPCONNSTATE, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 6}}, };oid ipv6tcp_variables_oid[] = { 1, 3, 6, 1, 2, 1, 6, 16 };#if 0config_load_mib(1.3 .6 .1 .3 .86 .1, 7, ipv6tcp_variables) config_add_mib(IPV6 - TCP - MIB)#endif void init_ipv6(){ /* * register ourselves with the agent to handle our mib tree */ REGISTER_MIB("mibII/ipv6", ipv6_variables, variable3, ipv6_variables_oid); REGISTER_MIB("mibII/icmpv6", ipv6icmp_variables, variable3, ipv6icmp_variables_oid); REGISTER_MIB("mibII/ipv6udp", ipv6udp_variables, variable2, ipv6udp_variables_oid); REGISTER_MIB("mibII/ipv6tcp", ipv6tcp_variables, variable2, ipv6tcp_variables_oid);}static intheader_ipv6(register struct variable *vp, /* * IN - pointer to variable entry that points here */ oid * name, /* IN/OUT - input name requested, output name found */ size_t * length, /* IN/OUT - length of input and output oid's */ int exact, /* IN - TRUE if an exact match was requested */ size_t * var_len, /* OUT - length of variable or 0 if function returned */ WriteMethod ** write_method){ oid newname[MAX_OID_LEN]; int result; DEBUGMSGTL(("mibII/ipv6", "header_ipv6: ")); DEBUGMSGOID(("mibII/ipv6", name, *length)); DEBUGMSG(("mibII/ipv6", " %d\n", exact)); memcpy((char *) newname, (char *) vp->name, (int) vp->namelen * sizeof(oid)); newname[(int) vp->namelen] = 0; result = snmp_oid_compare(name, *length, newname, (int) vp->namelen + 1); if ((exact && (result != 0)) || (!exact && (result >= 0))) return (MATCH_FAILED); memcpy((char *) name, (char *) newname, ((int) vp->namelen + 1) * sizeof(oid)); *length = vp->namelen + 1; *write_method = 0; *var_len = sizeof(long); /* default to 'long' results */ return (MATCH_SUCCEEDED);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -