diff --git a/CHANGELOG b/CHANGELOG index 174bb2bb..39f048c6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,10 @@ HISTORY ++ New features: + 2015-09-08: Dirk Ziegelmeier + * snmp: Separate mib2 counter/table callbacks from snmp agent. This both cleans + up the code and should allow integration of a 3rd party agent/mib2. + 2015-09-03: Simon Goldschmidt * opt.h, dns.h/.c: DNS/IPv6: added support for AAAA records @@ -21,7 +25,6 @@ HISTORY * support IPv4 source based routing: define LWIP_HOOK_IP4_ROUTE_SRC to point to a routing function - 2015-08-05: Simon Goldschmidt * many files: allow multicast socket options IP_MULTICAST_TTL, IP_MULTICAST_IF and IP_MULTICAST_LOOP to be used without IGMP diff --git a/src/core/ipv4/icmp.c b/src/core/ipv4/icmp.c index 0d669605..a9cf3b66 100644 --- a/src/core/ipv4/icmp.c +++ b/src/core/ipv4/icmp.c @@ -48,7 +48,6 @@ #include "lwip/ip.h" #include "lwip/def.h" #include "lwip/stats.h" -#include "lwip/snmp.h" #include @@ -87,7 +86,7 @@ icmp_input(struct pbuf *p, struct netif *inp) ip4_addr_t* src; ICMP_STATS_INC(icmp.recv); - snmp_inc_icmpinmsgs(); + MIB2_STATS_INC(mib2.icmpinmsgs); iphdr_in = ip4_current_header(); hlen = IPH_HL(iphdr_in) * 4; @@ -138,7 +137,7 @@ icmp_input(struct pbuf *p, struct netif *inp) LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); pbuf_free(p); ICMP_STATS_INC(icmp.chkerr); - snmp_inc_icmpinerrors(); + MIB2_STATS_INC(mib2.icmpinerrors); return; } } @@ -223,9 +222,9 @@ icmp_input(struct pbuf *p, struct netif *inp) ICMP_STATS_INC(icmp.xmit); /* increase number of messages attempted to send */ - snmp_inc_icmpoutmsgs(); + MIB2_STATS_INC(mib2.icmpoutmsgs); /* increase number of echo replies attempted to send */ - snmp_inc_icmpoutechoreps(); + MIB2_STATS_INC(mib2.icmpoutechoreps); /* send an ICMP packet */ ret = ip4_output_if(p, src, IP_HDRINCL, @@ -246,13 +245,13 @@ icmp_input(struct pbuf *p, struct netif *inp) lenerr: pbuf_free(p); ICMP_STATS_INC(icmp.lenerr); - snmp_inc_icmpinerrors(); + MIB2_STATS_INC(mib2.icmpinerrors); return; #if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN || !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING icmperr: pbuf_free(p); ICMP_STATS_INC(icmp.err); - snmp_inc_icmpinerrors(); + MIB2_STATS_INC(mib2.icmpinerrors); return; #endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN || !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ } @@ -344,9 +343,9 @@ icmp_send_response(struct pbuf *p, u8_t type, u8_t code) #endif ICMP_STATS_INC(icmp.xmit); /* increase number of messages attempted to send */ - snmp_inc_icmpoutmsgs(); + MIB2_STATS_INC(mib2.icmpoutmsgs); /* increase number of destination unreachable messages attempted to send */ - snmp_inc_icmpouttimeexcds(); + MIB2_STATS_INC(mib2.icmpouttimeexcds); ip4_addr_copy(iphdr_src, iphdr->src); ip4_output_if(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP, netif); } diff --git a/src/core/ipv4/ip4.c b/src/core/ipv4/ip4.c index c4ca61cd..8778cca9 100644 --- a/src/core/ipv4/ip4.c +++ b/src/core/ipv4/ip4.c @@ -53,7 +53,6 @@ #include "lwip/raw.h" #include "lwip/udp.h" #include "lwip/tcp_impl.h" -#include "lwip/snmp.h" #include "lwip/dhcp.h" #include "lwip/autoip.h" #include "lwip/stats.h" @@ -188,7 +187,7 @@ ip4_route(const ip4_addr_t *dest) LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); IP_STATS_INC(ip.rterr); - snmp_inc_ipoutnoroutes(); + MIB2_STATS_INC(mib2.ipoutnoroutes); return NULL; } @@ -302,7 +301,7 @@ ip4_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); /* send ICMP if TTL == 0 */ if (IPH_TTL(iphdr) == 0) { - snmp_inc_ipinhdrerrors(); + MIB2_STATS_INC(mib2.ipinhdrerrors); #if LWIP_ICMP /* Don't send ICMP messages in response to ICMP messages */ if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { @@ -324,8 +323,8 @@ ip4_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) ip4_addr3_16(ip4_current_dest_addr()), ip4_addr4_16(ip4_current_dest_addr()))); IP_STATS_INC(ip.fw); + MIB2_STATS_INC(mib2.ipforwdatagrams); IP_STATS_INC(ip.xmit); - snmp_inc_ipforwdatagrams(); PERF_STOP("ip_forward"); /* don't fragment if interface has mtu set to 0 [loopif] */ @@ -346,7 +345,7 @@ ip4_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) netif->output(netif, p, ip4_current_dest_addr()); return; return_noroute: - snmp_inc_ipoutnoroutes(); + MIB2_STATS_INC(mib2.ipoutnoroutes); } #endif /* IP_FORWARD */ @@ -393,7 +392,7 @@ ip4_input(struct pbuf *p, struct netif *inp) #endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING || LWIP_IGMP */ IP_STATS_INC(ip.recv); - snmp_inc_ipinreceives(); + MIB2_STATS_INC(mib2.ipinreceives); /* identify the IP header */ iphdr = (struct ip_hdr *)p->payload; @@ -403,7 +402,7 @@ ip4_input(struct pbuf *p, struct netif *inp) pbuf_free(p); IP_STATS_INC(ip.err); IP_STATS_INC(ip.drop); - snmp_inc_ipinhdrerrors(); + MIB2_STATS_INC(mib2.ipinhdrerrors); return ERR_OK; } @@ -442,7 +441,7 @@ ip4_input(struct pbuf *p, struct netif *inp) pbuf_free(p); IP_STATS_INC(ip.lenerr); IP_STATS_INC(ip.drop); - snmp_inc_ipindiscards(); + MIB2_STATS_INC(mib2.ipindiscards); return ERR_OK; } @@ -457,7 +456,7 @@ ip4_input(struct pbuf *p, struct netif *inp) pbuf_free(p); IP_STATS_INC(ip.chkerr); IP_STATS_INC(ip.drop); - snmp_inc_ipinhdrerrors(); + MIB2_STATS_INC(mib2.ipinhdrerrors); return ERR_OK; } } @@ -577,8 +576,8 @@ ip4_input(struct pbuf *p, struct netif *inp) /* free (drop) packet pbufs */ pbuf_free(p); IP_STATS_INC(ip.drop); - snmp_inc_ipinaddrerrors(); - snmp_inc_ipindiscards(); + MIB2_STATS_INC(mib2.ipinaddrerrors); + MIB2_STATS_INC(mib2.ipindiscards); return ERR_OK; } } @@ -595,8 +594,8 @@ ip4_input(struct pbuf *p, struct netif *inp) } else #endif /* IP_FORWARD */ { - snmp_inc_ipinaddrerrors(); - snmp_inc_ipindiscards(); + MIB2_STATS_INC(mib2.ipinaddrerrors); + MIB2_STATS_INC(mib2.ipindiscards); } pbuf_free(p); return ERR_OK; @@ -620,7 +619,7 @@ ip4_input(struct pbuf *p, struct netif *inp) IP_STATS_INC(ip.opterr); IP_STATS_INC(ip.drop); /* unsupported protocol feature */ - snmp_inc_ipinunknownprotos(); + MIB2_STATS_INC(mib2.ipinunknownprotos); return ERR_OK; #endif /* IP_REASSEMBLY */ } @@ -638,7 +637,7 @@ ip4_input(struct pbuf *p, struct netif *inp) IP_STATS_INC(ip.opterr); IP_STATS_INC(ip.drop); /* unsupported protocol feature */ - snmp_inc_ipinunknownprotos(); + MIB2_STATS_INC(mib2.ipinunknownprotos); return ERR_OK; } #endif /* IP_OPTIONS_ALLOWED == 0 */ @@ -666,19 +665,19 @@ ip4_input(struct pbuf *p, struct netif *inp) #if LWIP_UDPLITE case IP_PROTO_UDPLITE: #endif /* LWIP_UDPLITE */ - snmp_inc_ipindelivers(); + MIB2_STATS_INC(mib2.ipindelivers); udp_input(p, inp); break; #endif /* LWIP_UDP */ #if LWIP_TCP case IP_PROTO_TCP: - snmp_inc_ipindelivers(); + MIB2_STATS_INC(mib2.ipindelivers); tcp_input(p, inp); break; #endif /* LWIP_TCP */ #if LWIP_ICMP case IP_PROTO_ICMP: - snmp_inc_ipindelivers(); + MIB2_STATS_INC(mib2.ipindelivers); icmp_input(p, inp); break; #endif /* LWIP_ICMP */ @@ -703,7 +702,7 @@ ip4_input(struct pbuf *p, struct netif *inp) IP_STATS_INC(ip.proterr); IP_STATS_INC(ip.drop); - snmp_inc_ipinunknownprotos(); + MIB2_STATS_INC(mib2.ipinunknownprotos); } } @@ -808,7 +807,7 @@ err_t ip4_output_if_opt_src(struct pbuf *p, const ip4_addr_t *src, const ip4_add LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); - snmp_inc_ipoutrequests(); + MIB2_STATS_INC(mib2.ipoutrequests); /* Should the IP header be generated or is it already included in p? */ if (dest != IP_HDRINCL) { @@ -826,7 +825,7 @@ err_t ip4_output_if_opt_src(struct pbuf *p, const ip4_addr_t *src, const ip4_add if (pbuf_header(p, optlen_aligned)) { LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output_if_opt: not enough room for IP options in pbuf\n")); IP_STATS_INC(ip.err); - snmp_inc_ipoutdiscards(); + MIB2_STATS_INC(mib2.ipoutdiscards); return ERR_BUF; } MEMCPY(p->payload, ip_options, optlen); @@ -846,7 +845,7 @@ err_t ip4_output_if_opt_src(struct pbuf *p, const ip4_addr_t *src, const ip4_add LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output: not enough room for IP header in pbuf\n")); IP_STATS_INC(ip.err); - snmp_inc_ipoutdiscards(); + MIB2_STATS_INC(mib2.ipoutdiscards); return ERR_BUF; } diff --git a/src/core/ipv4/ip_frag.c b/src/core/ipv4/ip_frag.c index 7e933aca..e239ba2d 100644 --- a/src/core/ipv4/ip_frag.c +++ b/src/core/ipv4/ip_frag.c @@ -46,7 +46,6 @@ #include "lwip/def.h" #include "lwip/inet_chksum.h" #include "lwip/netif.h" -#include "lwip/snmp.h" #include "lwip/stats.h" #include "lwip/icmp.h" @@ -170,7 +169,7 @@ ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *p LWIP_ASSERT("prev->next == ipr", prev->next == ipr); } - snmp_inc_ipreasmfails(); + MIB2_STATS_INC(mib2.ipreasmfails); #if LWIP_ICMP iprh = (struct ip_reass_helper *)ipr->p->payload; if (iprh->start == 0) { @@ -489,8 +488,8 @@ ip4_reass(struct pbuf *p) u8_t clen; IPFRAG_STATS_INC(ip_frag.recv); - snmp_inc_ipreasmreqds(); - + MIB2_STATS_INC(mib2.ipreasmreqds); + fraghdr = (struct ip_hdr*)p->payload; if ((IPH_HL(fraghdr) * 4) != IP_HLEN) { @@ -853,7 +852,7 @@ ip4_frag(struct pbuf *p, struct netif *netif, const ip4_addr_t *dest) pbuf_chain(header, rambuf); netif->output(netif, header, dest); IPFRAG_STATS_INC(ip_frag.xmit); - snmp_inc_ipfragcreates(); + MIB2_STATS_INC(mib2.ipfragcreates); pbuf_free(header); } else { LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc() for header failed\n")); @@ -882,7 +881,7 @@ ip4_frag(struct pbuf *p, struct netif *netif, const ip4_addr_t *dest) #if IP_FRAG_USES_STATIC_BUF pbuf_free(rambuf); #endif /* IP_FRAG_USES_STATIC_BUF */ - snmp_inc_ipfragoks(); + MIB2_STATS_INC(mib2.ipfragoks); return ERR_OK; } #endif /* IP_FRAG */ diff --git a/src/core/netif.c b/src/core/netif.c index 668196f5..08c08648 100644 --- a/src/core/netif.c +++ b/src/core/netif.c @@ -44,10 +44,11 @@ #include "lwip/netif.h" #include "lwip/tcp_impl.h" #include "lwip/udp.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/igmp.h" #include "netif/etharp.h" #include "lwip/stats.h" +#include "lwip/sys.h" #if ENABLE_LOOPBACK #include "lwip/sys.h" #if LWIP_NETIF_LOOPBACK_MULTITHREADING @@ -117,7 +118,7 @@ netif_loopif_init(struct netif *netif) /* initialize the snmp variables and counters inside the struct netif * ifSpeed: no assumption can be made! */ - NETIF_INIT_SNMP(netif, snmp_ifType_softwareLoopback, 0); + MIB2_INIT_NETIF(netif, snmp_ifType_softwareLoopback, 0); netif->name[0] = 'l'; netif->name[1] = 'o'; @@ -264,7 +265,7 @@ netif_add(struct netif *netif, /* add this netif to the list */ netif->next = netif_list; netif_list = netif; - snmp_inc_iflist(); + mib2_netif_added(netif); #if LWIP_IGMP /* start IGMP processing */ @@ -345,7 +346,7 @@ netif_remove(struct netif *netif) netif_set_down(netif); } - snmp_delete_ipaddridx_tree(netif); + mib2_remove_ip4(netif); /* this netif is default? */ if (netif_default == netif) { @@ -368,7 +369,7 @@ netif_remove(struct netif *netif) return; /* netif is not on the list */ } } - snmp_dec_iflist(); + mib2_netif_removed(netif); #if LWIP_NETIF_REMOVE_CALLBACK if (netif->remove_callback) { netif->remove_callback(netif); @@ -431,12 +432,12 @@ netif_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr) udp_netif_ipv4_addr_changed(netif_ip4_addr(netif), ipaddr); #endif /* LWIP_UDP */ - snmp_delete_ipaddridx_tree(netif); - snmp_delete_iprteidx_tree(0, netif); + mib2_remove_ip4(netif); + mib2_remove_route_ip4(0, netif); /* set new IP address to netif */ ip4_addr_set(netif_ip4_addr(netif), ipaddr); - snmp_insert_ipaddridx_tree(netif); - snmp_insert_iprteidx_tree(0, netif); + mib2_add_ip4(netif); + mib2_add_route_ip4(0, netif); netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4); @@ -483,10 +484,10 @@ netif_set_gw(struct netif *netif, const ip4_addr_t *gw) void netif_set_netmask(struct netif *netif, const ip4_addr_t *netmask) { - snmp_delete_iprteidx_tree(0, netif); + mib2_remove_route_ip4(0, netif); /* set new netmask to netif */ ip4_addr_set(netif_ip4_netmask(netif), netmask); - snmp_insert_iprteidx_tree(0, netif); + mib2_add_route_ip4(0, netif); LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", netif->name[0], netif->name[1], ip4_addr1_16(netif_ip4_netmask(netif)), @@ -507,10 +508,10 @@ netif_set_default(struct netif *netif) { if (netif == NULL) { /* remove default route */ - snmp_delete_iprteidx_tree(1, netif); + mib2_remove_route_ip4(1, netif); } else { /* install default route */ - snmp_insert_iprteidx_tree(1, netif); + mib2_add_route_ip4(1, netif); } netif_default = netif; LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", @@ -531,9 +532,7 @@ void netif_set_up(struct netif *netif) if (!(netif->flags & NETIF_FLAG_UP)) { netif->flags |= NETIF_FLAG_UP; -#if LWIP_SNMP - snmp_get_sysuptime(&netif->ts); -#endif /* LWIP_SNMP */ + MIB2_COPY_SYSUPTIME_TO(&netif->ts); NETIF_STATUS_CALLBACK(netif); @@ -593,9 +592,7 @@ void netif_set_down(struct netif *netif) { if (netif->flags & NETIF_FLAG_UP) { netif->flags &= ~NETIF_FLAG_UP; -#if LWIP_SNMP - snmp_get_sysuptime(&netif->ts); -#endif + a MIB2_COPY_SYSUPTIME_TO(&netif->ts); #if LWIP_IPV4 && LWIP_ARP if (netif->flags & NETIF_FLAG_ETHARP) { @@ -706,13 +703,13 @@ netif_loop_output(struct netif *netif, struct pbuf *p) #endif /* LWIP_LOOPBACK_MAX_PBUFS */ /* If we have a loopif, SNMP counters are adjusted for it, * if not they are adjusted for 'netif'. */ -#if LWIP_SNMP +#if MIB2_STATS #if LWIP_HAVE_LOOPIF struct netif *stats_if = &loop_netif; #else /* LWIP_HAVE_LOOPIF */ struct netif *stats_if = netif; #endif /* LWIP_HAVE_LOOPIF */ -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ SYS_ARCH_DECL_PROTECT(lev); /* Allocate a new pbuf */ @@ -720,7 +717,7 @@ netif_loop_output(struct netif *netif, struct pbuf *p) if (r == NULL) { LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(stats_if); + MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); return ERR_MEM; } #if LWIP_LOOPBACK_MAX_PBUFS @@ -731,7 +728,7 @@ netif_loop_output(struct netif *netif, struct pbuf *p) pbuf_free(r); LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(stats_if); + MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); return ERR_MEM; } netif->loop_cnt_current += clen; @@ -742,7 +739,7 @@ netif_loop_output(struct netif *netif, struct pbuf *p) pbuf_free(r); LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(stats_if); + MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); return err; } @@ -764,8 +761,8 @@ netif_loop_output(struct netif *netif, struct pbuf *p) SYS_ARCH_UNPROTECT(lev); LINK_STATS_INC(link.xmit); - snmp_add_ifoutoctets(stats_if, p->tot_len); - snmp_inc_ifoutucastpkts(stats_if); + MIB2_STATS_NETIF_ADD(stats_if, ifoutoctets, p->tot_len); + MIB2_STATS_NETIF_INC(stats_if, ifoutucastpkts); #if LWIP_NETIF_LOOPBACK_MULTITHREADING /* For multithreading environment, schedule a call to netif_poll */ @@ -806,13 +803,13 @@ netif_poll(struct netif *netif) struct pbuf *in; /* If we have a loopif, SNMP counters are adjusted for it, * if not they are adjusted for 'netif'. */ -#if LWIP_SNMP +#if MIB2_STATS #if LWIP_HAVE_LOOPIF struct netif *stats_if = &loop_netif; #else /* LWIP_HAVE_LOOPIF */ struct netif *stats_if = netif; #endif /* LWIP_HAVE_LOOPIF */ -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ SYS_ARCH_DECL_PROTECT(lev); do { @@ -854,8 +851,8 @@ netif_poll(struct netif *netif) if (in != NULL) { LINK_STATS_INC(link.recv); - snmp_add_ifinoctets(stats_if, in->tot_len); - snmp_inc_ifinucastpkts(stats_if); + MIB2_STATS_NETIF_ADD(stats_if, ifinoctets, in->tot_len); + MIB2_STATS_NETIF_INC(stats_if, ifinucastpkts); /* loopback packets are always IP packets! */ if (ip_input(in, netif) != ERR_OK) { pbuf_free(in); diff --git a/src/core/snmp/mib2.c b/src/core/snmp/mib2.c index 5e2ea4fd..438d0141 100644 --- a/src/core/snmp/mib2.c +++ b/src/core/snmp/mib2.c @@ -40,6 +40,18 @@ #if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ #include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" + +#if !LWIP_MIB2_CALLBACKS +#error LWIP_SNMP MIB2 needs LWIP_MIB2_CALLBACKS (for MIB2) +#endif +#if !LWIP_STATS +#error LWIP_SNMP MIB2 needs LWIP_STATS (for MIB2) +#endif +#if !MIB2_STATS +#error LWIP_SNMP MIB2 needs MIB2_STATS (for MIB2) +#endif + #include "lwip/netif.h" #include "lwip/ip.h" #include "lwip/ip_frag.h" @@ -50,6 +62,7 @@ #include "lwip/snmp_structs.h" #include "lwip/sys.h" #include "netif/etharp.h" +#include "lwip/stats.h" #include @@ -74,10 +87,6 @@ #define SNMP_SYSSERVICES ((1 << 6) | (1 << 3) | ((IP_FORWARD) << 2)) #endif -#ifndef SNMP_GET_SYSUPTIME -#define SNMP_GET_SYSUPTIME(sysuptime) (sysuptime = (sys_now() / 10)) -#endif - static void system_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od); static void system_get_value(struct obj_def *od, u16_t len, void *value); static u8_t system_set_test(struct obj_def *od, u16_t len, void *value); @@ -805,70 +814,6 @@ static const struct snmp_obj_id ifspecific = {2, {0, 0}}; static const struct snmp_obj_id iprouteinfo = {2, {0, 0}}; - -/* mib-2.system counter(s) */ -static u32_t sysuptime = 0; - -/* mib-2.ip counter(s) */ -static u32_t ipinreceives = 0, - ipinhdrerrors = 0, - ipinaddrerrors = 0, - ipforwdatagrams = 0, - ipinunknownprotos = 0, - ipindiscards = 0, - ipindelivers = 0, - ipoutrequests = 0, - ipoutdiscards = 0, - ipoutnoroutes = 0, - ipreasmreqds = 0, - ipreasmoks = 0, - ipreasmfails = 0, - ipfragoks = 0, - ipfragfails = 0, - ipfragcreates = 0, - iproutingdiscards = 0; -/* mib-2.icmp counter(s) */ -static u32_t icmpinmsgs = 0, - icmpinerrors = 0, - icmpindestunreachs = 0, - icmpintimeexcds = 0, - icmpinparmprobs = 0, - icmpinsrcquenchs = 0, - icmpinredirects = 0, - icmpinechos = 0, - icmpinechoreps = 0, - icmpintimestamps = 0, - icmpintimestampreps = 0, - icmpinaddrmasks = 0, - icmpinaddrmaskreps = 0, - icmpoutmsgs = 0, - icmpouterrors = 0, - icmpoutdestunreachs = 0, - icmpouttimeexcds = 0, - icmpoutparmprobs = 0, - icmpoutsrcquenchs = 0, - icmpoutredirects = 0, - icmpoutechos = 0, - icmpoutechoreps = 0, - icmpouttimestamps = 0, - icmpouttimestampreps = 0, - icmpoutaddrmasks = 0, - icmpoutaddrmaskreps = 0; -/* mib-2.tcp counter(s) */ -static u32_t tcpactiveopens = 0, - tcppassiveopens = 0, - tcpattemptfails = 0, - tcpestabresets = 0, - tcpinsegs = 0, - tcpoutsegs = 0, - tcpretranssegs = 0, - tcpinerrs = 0, - tcpoutrsts = 0; -/* mib-2.udp counter(s) */ -static u32_t udpindatagrams = 0, - udpnoports = 0, - udpinerrors = 0, - udpoutdatagrams = 0; /* mib-2.snmp counter(s) */ static u32_t snmpinpkts = 0, snmpoutpkts = 0, @@ -929,26 +874,6 @@ void snmp_set_sysobjid(const struct snmp_obj_id *oid) sysobjid_ptr = oid; } -/** - * Must be called at regular 10 msec interval from a timer interrupt - * or signal handler depending on your runtime environment. - */ -void snmp_inc_sysuptime(void) -{ - sysuptime++; -} - -void snmp_add_sysuptime(u32_t value) -{ - sysuptime+=value; -} - -void snmp_get_sysuptime(u32_t *value) -{ - SNMP_GET_SYSUPTIME(sysuptime); - *value = sysuptime; -} - /** * Initializes sysContact pointers, * e.g. ptrs to non-volatile memory external to lwIP. @@ -1006,58 +931,21 @@ void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen, u8_t bufsize) } } - -void snmp_add_ifinoctets(struct netif *ni, u32_t value) -{ - ni->ifinoctets += value; -} - -void snmp_inc_ifinucastpkts(struct netif *ni) -{ - (ni->ifinucastpkts)++; -} - -void snmp_inc_ifinnucastpkts(struct netif *ni) -{ - (ni->ifinnucastpkts)++; -} - -void snmp_inc_ifindiscards(struct netif *ni) -{ - (ni->ifindiscards)++; -} - -void snmp_add_ifoutoctets(struct netif *ni, u32_t value) -{ - ni->ifoutoctets += value; -} - -void snmp_inc_ifoutucastpkts(struct netif *ni) -{ - (ni->ifoutucastpkts)++; -} - -void snmp_inc_ifoutnucastpkts(struct netif *ni) -{ - (ni->ifoutnucastpkts)++; -} - -void snmp_inc_ifoutdiscards(struct netif *ni) -{ - (ni->ifoutdiscards)++; -} - -void snmp_inc_iflist(void) +void mib2_netif_added(struct netif *ni) { struct mib_list_node *if_node = NULL; + LWIP_UNUSED_ARG(ni); + snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node); /* enable getnext traversal on filled table */ iftable.maxlength = 1; } -void snmp_dec_iflist(void) +void mib2_netif_removed(struct netif *ni) { + LWIP_UNUSED_ARG(ni); + snmp_mib_node_delete(&iflist_root, iflist_root.tail); /* disable getnext traversal on empty table */ if(iflist_root.count == 0) iftable.maxlength = 0; @@ -1067,7 +955,7 @@ void snmp_dec_iflist(void) * Inserts ARP table indexes (.xIfIndex.xNetAddress) * into arp table index trees (both atTable and ipNetToMediaTable). */ -void snmp_insert_arpidx_tree(struct netif *ni, ip4_addr_t *ip) +void mib2_add_arp_entry(struct netif *ni, ip4_addr_t *ip) { struct mib_list_rootnode *at_rn; struct mib_list_node *at_node; @@ -1139,7 +1027,7 @@ void snmp_insert_arpidx_tree(struct netif *ni, ip4_addr_t *ip) * Removes ARP table indexes (.xIfIndex.xNetAddress) * from arp table index trees. */ -void snmp_delete_arpidx_tree(struct netif *ni, ip4_addr_t *ip) +void mib2_remove_arp_entry(struct netif *ni, ip4_addr_t *ip) { struct mib_list_rootnode *at_rn, *next, *del_rn[5]; struct mib_list_node *at_n, *del_n[5]; @@ -1207,96 +1095,11 @@ void snmp_delete_arpidx_tree(struct netif *ni, ip4_addr_t *ip) if(ipntomtree_root.count == 0) ipntomtable.maxlength = 0; } -void snmp_inc_ipinreceives(void) -{ - ipinreceives++; -} - -void snmp_inc_ipinhdrerrors(void) -{ - ipinhdrerrors++; -} - -void snmp_inc_ipinaddrerrors(void) -{ - ipinaddrerrors++; -} - -void snmp_inc_ipforwdatagrams(void) -{ - ipforwdatagrams++; -} - -void snmp_inc_ipinunknownprotos(void) -{ - ipinunknownprotos++; -} - -void snmp_inc_ipindiscards(void) -{ - ipindiscards++; -} - -void snmp_inc_ipindelivers(void) -{ - ipindelivers++; -} - -void snmp_inc_ipoutrequests(void) -{ - ipoutrequests++; -} - -void snmp_inc_ipoutdiscards(void) -{ - ipoutdiscards++; -} - -void snmp_inc_ipoutnoroutes(void) -{ - ipoutnoroutes++; -} - -void snmp_inc_ipreasmreqds(void) -{ - ipreasmreqds++; -} - -void snmp_inc_ipreasmoks(void) -{ - ipreasmoks++; -} - -void snmp_inc_ipreasmfails(void) -{ - ipreasmfails++; -} - -void snmp_inc_ipfragoks(void) -{ - ipfragoks++; -} - -void snmp_inc_ipfragfails(void) -{ - ipfragfails++; -} - -void snmp_inc_ipfragcreates(void) -{ - ipfragcreates++; -} - -void snmp_inc_iproutingdiscards(void) -{ - iproutingdiscards++; -} - /** * Inserts ipAddrTable indexes (.ipAdEntAddr) * into index tree. */ -void snmp_insert_ipaddridx_tree(struct netif *ni) +void mib2_add_ip4(struct netif *ni) { struct mib_list_rootnode *ipa_rn; struct mib_list_node *ipa_node; @@ -1350,7 +1153,7 @@ void snmp_insert_ipaddridx_tree(struct netif *ni) * Removes ipAddrTable indexes (.ipAdEntAddr) * from index tree. */ -void snmp_delete_ipaddridx_tree(struct netif *ni) +void mib2_remove_ip4(struct netif *ni) { struct mib_list_rootnode *ipa_rn, *next, *del_rn[4]; struct mib_list_node *ipa_n, *del_n[4]; @@ -1417,7 +1220,7 @@ void snmp_delete_ipaddridx_tree(struct netif *ni) * @todo record sysuptime for _this_ route when it is installed * (needed for ipRouteAge) in the netif. */ -void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni) +void mib2_add_route_ip4(u8_t dflt, struct netif *ni) { u8_t insert = 0; ip4_addr_t dst; @@ -1494,7 +1297,7 @@ void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni) * @param ni points to network interface for this rte or NULL * for default route to be removed. */ -void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni) +void mib2_remove_route_ip4(u8_t dflt, struct netif *ni) { u8_t del = 0; ip4_addr_t dst; @@ -1571,206 +1374,11 @@ void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni) } -void snmp_inc_icmpinmsgs(void) -{ - icmpinmsgs++; -} - -void snmp_inc_icmpinerrors(void) -{ - icmpinerrors++; -} - -void snmp_inc_icmpindestunreachs(void) -{ - icmpindestunreachs++; -} - -void snmp_inc_icmpintimeexcds(void) -{ - icmpintimeexcds++; -} - -void snmp_inc_icmpinparmprobs(void) -{ - icmpinparmprobs++; -} - -void snmp_inc_icmpinsrcquenchs(void) -{ - icmpinsrcquenchs++; -} - -void snmp_inc_icmpinredirects(void) -{ - icmpinredirects++; -} - -void snmp_inc_icmpinechos(void) -{ - icmpinechos++; -} - -void snmp_inc_icmpinechoreps(void) -{ - icmpinechoreps++; -} - -void snmp_inc_icmpintimestamps(void) -{ - icmpintimestamps++; -} - -void snmp_inc_icmpintimestampreps(void) -{ - icmpintimestampreps++; -} - -void snmp_inc_icmpinaddrmasks(void) -{ - icmpinaddrmasks++; -} - -void snmp_inc_icmpinaddrmaskreps(void) -{ - icmpinaddrmaskreps++; -} - -void snmp_inc_icmpoutmsgs(void) -{ - icmpoutmsgs++; -} - -void snmp_inc_icmpouterrors(void) -{ - icmpouterrors++; -} - -void snmp_inc_icmpoutdestunreachs(void) -{ - icmpoutdestunreachs++; -} - -void snmp_inc_icmpouttimeexcds(void) -{ - icmpouttimeexcds++; -} - -void snmp_inc_icmpoutparmprobs(void) -{ - icmpoutparmprobs++; -} - -void snmp_inc_icmpoutsrcquenchs(void) -{ - icmpoutsrcquenchs++; -} - -void snmp_inc_icmpoutredirects(void) -{ - icmpoutredirects++; -} - -void snmp_inc_icmpoutechos(void) -{ - icmpoutechos++; -} - -void snmp_inc_icmpoutechoreps(void) -{ - icmpoutechoreps++; -} - -void snmp_inc_icmpouttimestamps(void) -{ - icmpouttimestamps++; -} - -void snmp_inc_icmpouttimestampreps(void) -{ - icmpouttimestampreps++; -} - -void snmp_inc_icmpoutaddrmasks(void) -{ - icmpoutaddrmasks++; -} - -void snmp_inc_icmpoutaddrmaskreps(void) -{ - icmpoutaddrmaskreps++; -} - -void snmp_inc_tcpactiveopens(void) -{ - tcpactiveopens++; -} - -void snmp_inc_tcppassiveopens(void) -{ - tcppassiveopens++; -} - -void snmp_inc_tcpattemptfails(void) -{ - tcpattemptfails++; -} - -void snmp_inc_tcpestabresets(void) -{ - tcpestabresets++; -} - -void snmp_inc_tcpinsegs(void) -{ - tcpinsegs++; -} - -void snmp_inc_tcpoutsegs(void) -{ - tcpoutsegs++; -} - -void snmp_inc_tcpretranssegs(void) -{ - tcpretranssegs++; -} - -void snmp_inc_tcpinerrs(void) -{ - tcpinerrs++; -} - -void snmp_inc_tcpoutrsts(void) -{ - tcpoutrsts++; -} - -void snmp_inc_udpindatagrams(void) -{ - udpindatagrams++; -} - -void snmp_inc_udpnoports(void) -{ - udpnoports++; -} - -void snmp_inc_udpinerrors(void) -{ - udpinerrors++; -} - -void snmp_inc_udpoutdatagrams(void) -{ - udpoutdatagrams++; -} - /** * Inserts udpTable indexes (.udpLocalAddress.udpLocalPort) * into index tree. */ -void snmp_insert_udpidx_tree(struct udp_pcb *pcb) +void mib2_udp_bind(struct udp_pcb *pcb) { struct mib_list_rootnode *udp_rn; struct mib_list_node *udp_node; @@ -1826,7 +1434,7 @@ void snmp_insert_udpidx_tree(struct udp_pcb *pcb) * Removes udpTable indexes (.udpLocalAddress.udpLocalPort) * from index tree. */ -void snmp_delete_udpidx_tree(struct udp_pcb *pcb) +void mib2_udp_unbind(struct udp_pcb *pcb) { struct udp_pcb *npcb; struct mib_list_rootnode *udp_rn, *next, *del_rn[5]; @@ -1907,142 +1515,142 @@ void snmp_delete_udpidx_tree(struct udp_pcb *pcb) } -void snmp_inc_snmpinpkts(void) +void mib2_inc_snmpinpkts(void) { snmpinpkts++; } -void snmp_inc_snmpoutpkts(void) +void mib2_inc_snmpoutpkts(void) { snmpoutpkts++; } -void snmp_inc_snmpinbadversions(void) +void mib2_inc_snmpinbadversions(void) { snmpinbadversions++; } -void snmp_inc_snmpinbadcommunitynames(void) +void mib2_inc_snmpinbadcommunitynames(void) { snmpinbadcommunitynames++; } -void snmp_inc_snmpinbadcommunityuses(void) +void mib2_inc_snmpinbadcommunityuses(void) { snmpinbadcommunityuses++; } -void snmp_inc_snmpinasnparseerrs(void) +void mib2_inc_snmpinasnparseerrs(void) { snmpinasnparseerrs++; } -void snmp_inc_snmpintoobigs(void) +void mib2_inc_snmpintoobigs(void) { snmpintoobigs++; } -void snmp_inc_snmpinnosuchnames(void) +void mib2_inc_snmpinnosuchnames(void) { snmpinnosuchnames++; } -void snmp_inc_snmpinbadvalues(void) +void mib2_inc_snmpinbadvalues(void) { snmpinbadvalues++; } -void snmp_inc_snmpinreadonlys(void) +void mib2_inc_snmpinreadonlys(void) { snmpinreadonlys++; } -void snmp_inc_snmpingenerrs(void) +void mib2_inc_snmpingenerrs(void) { snmpingenerrs++; } -void snmp_add_snmpintotalreqvars(u8_t value) +void mib2_add_snmpintotalreqvars(u8_t value) { snmpintotalreqvars += value; } -void snmp_add_snmpintotalsetvars(u8_t value) +void mib2_add_snmpintotalsetvars(u8_t value) { snmpintotalsetvars += value; } -void snmp_inc_snmpingetrequests(void) +void mib2_inc_snmpingetrequests(void) { snmpingetrequests++; } -void snmp_inc_snmpingetnexts(void) +void mib2_inc_snmpingetnexts(void) { snmpingetnexts++; } -void snmp_inc_snmpinsetrequests(void) +void mib2_inc_snmpinsetrequests(void) { snmpinsetrequests++; } -void snmp_inc_snmpingetresponses(void) +void mib2_inc_snmpingetresponses(void) { snmpingetresponses++; } -void snmp_inc_snmpintraps(void) +void mib2_inc_snmpintraps(void) { snmpintraps++; } -void snmp_inc_snmpouttoobigs(void) +void mib2_inc_snmpouttoobigs(void) { snmpouttoobigs++; } -void snmp_inc_snmpoutnosuchnames(void) +void mib2_inc_snmpoutnosuchnames(void) { snmpoutnosuchnames++; } -void snmp_inc_snmpoutbadvalues(void) +void mib2_inc_snmpoutbadvalues(void) { snmpoutbadvalues++; } -void snmp_inc_snmpoutgenerrs(void) +void mib2_inc_snmpoutgenerrs(void) { snmpoutgenerrs++; } -void snmp_inc_snmpoutgetrequests(void) +void mib2_inc_snmpoutgetrequests(void) { snmpoutgetrequests++; } -void snmp_inc_snmpoutgetnexts(void) +void mib2_inc_snmpoutgetnexts(void) { snmpoutgetnexts++; } -void snmp_inc_snmpoutsetrequests(void) +void mib2_inc_snmpoutsetrequests(void) { snmpoutsetrequests++; } -void snmp_inc_snmpoutgetresponses(void) +void mib2_inc_snmpoutgetresponses(void) { snmpoutgetresponses++; } -void snmp_inc_snmpouttraps(void) +void mib2_inc_snmpouttraps(void) { snmpouttraps++; } -void snmp_get_snmpgrpid_ptr(const struct snmp_obj_id **oid) +void mib2_get_snmpgrpid_ptr(const struct snmp_obj_id **oid) { *oid = &snmpgrp_id; } @@ -2055,7 +1663,7 @@ void snmp_set_snmpenableauthentraps(u8_t *value) } } -void snmp_get_snmpenableauthentraps(u8_t *value) +void mib2_get_snmpenableauthentraps(u8_t *value) { *value = *snmpenableauthentraps_ptr; } @@ -2199,9 +1807,7 @@ system_get_value(struct obj_def *od, u16_t len, void *value) MEMCPY(value, sysobjid_ptr->id, len); break; case 3: /* sysUpTime */ - { - snmp_get_sysuptime((u32_t*)value); - } + MIB2_COPY_SYSUPTIME_TO((u32_t*)value); break; case 4: /* sysContact */ MEMCPY(value, syscontact_ptr, len); @@ -2864,61 +2470,61 @@ ip_get_value(struct obj_def *od, u16_t len, void *value) case 3: /* ipInReceives */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipinreceives; + *uint_ptr = STATS_GET(mib2.ipinreceives); } break; case 4: /* ipInHdrErrors */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipinhdrerrors; + *uint_ptr = STATS_GET(mib2.ipinhdrerrors); } break; case 5: /* ipInAddrErrors */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipinaddrerrors; + *uint_ptr = STATS_GET(mib2.ipinaddrerrors); } break; case 6: /* ipForwDatagrams */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipforwdatagrams; + *uint_ptr = STATS_GET(mib2.ipforwdatagrams); } break; case 7: /* ipInUnknownProtos */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipinunknownprotos; + *uint_ptr = STATS_GET(mib2.ipinunknownprotos); } break; case 8: /* ipInDiscards */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipindiscards; + *uint_ptr = STATS_GET(mib2.ipindiscards); } break; case 9: /* ipInDelivers */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipindelivers; + *uint_ptr = STATS_GET(mib2.ipindelivers); } break; case 10: /* ipOutRequests */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipoutrequests; + *uint_ptr = STATS_GET(mib2.ipoutrequests); } break; case 11: /* ipOutDiscards */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipoutdiscards; + *uint_ptr = STATS_GET(mib2.ipoutdiscards); } break; case 12: /* ipOutNoRoutes */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipoutnoroutes; + *uint_ptr = STATS_GET(mib2.ipoutnoroutes); } break; case 13: /* ipReasmTimeout */ @@ -2934,44 +2540,44 @@ ip_get_value(struct obj_def *od, u16_t len, void *value) case 14: /* ipReasmReqds */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipreasmreqds; + *uint_ptr = STATS_GET(mib2.ipreasmreqds); } break; case 15: /* ipReasmOKs */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipreasmoks; + *uint_ptr = STATS_GET(mib2.ipreasmoks); } break; case 16: /* ipReasmFails */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipreasmfails; + *uint_ptr = STATS_GET(mib2.ipreasmfails); } break; case 17: /* ipFragOKs */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipfragoks; + *uint_ptr = STATS_GET(mib2.ipfragoks); } break; case 18: /* ipFragFails */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipfragfails; + *uint_ptr = STATS_GET(mib2.ipfragfails); } break; case 19: /* ipFragCreates */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = ipfragcreates; + *uint_ptr = STATS_GET(mib2.ipfragcreates); } break; case 23: /* ipRoutingDiscards */ /** @todo can lwIP discard routes at all?? hardwire this to 0?? */ { u32_t *uint_ptr = (u32_t*)value; - *uint_ptr = iproutingdiscards; + *uint_ptr = STATS_GET(mib2.iproutingdiscards); } break; default: @@ -3516,82 +3122,82 @@ icmp_get_value(struct obj_def *od, u16_t len, void *value) switch (id) { case 1: /* icmpInMsgs */ - *uint_ptr = icmpinmsgs; + *uint_ptr = STATS_GET(mib2.icmpinmsgs); break; case 2: /* icmpInErrors */ - *uint_ptr = icmpinerrors; + *uint_ptr = STATS_GET(mib2.icmpinerrors); break; case 3: /* icmpInDestUnreachs */ - *uint_ptr = icmpindestunreachs; + *uint_ptr = STATS_GET(mib2.icmpindestunreachs); break; case 4: /* icmpInTimeExcds */ - *uint_ptr = icmpintimeexcds; + *uint_ptr = STATS_GET(mib2.icmpintimeexcds); break; case 5: /* icmpInParmProbs */ - *uint_ptr = icmpinparmprobs; + *uint_ptr = STATS_GET(mib2.icmpinparmprobs); break; case 6: /* icmpInSrcQuenchs */ - *uint_ptr = icmpinsrcquenchs; + *uint_ptr = STATS_GET(mib2.icmpinsrcquenchs); break; case 7: /* icmpInRedirects */ - *uint_ptr = icmpinredirects; + *uint_ptr = STATS_GET(mib2.icmpinredirects); break; case 8: /* icmpInEchos */ - *uint_ptr = icmpinechos; + *uint_ptr = STATS_GET(mib2.icmpinechos); break; case 9: /* icmpInEchoReps */ - *uint_ptr = icmpinechoreps; + *uint_ptr = STATS_GET(mib2.icmpinechoreps); break; case 10: /* icmpInTimestamps */ - *uint_ptr = icmpintimestamps; + *uint_ptr = STATS_GET(mib2.icmpintimestamps); break; case 11: /* icmpInTimestampReps */ - *uint_ptr = icmpintimestampreps; + *uint_ptr = STATS_GET(mib2.icmpintimestampreps); break; case 12: /* icmpInAddrMasks */ - *uint_ptr = icmpinaddrmasks; + *uint_ptr = STATS_GET(mib2.icmpinaddrmasks); break; case 13: /* icmpInAddrMaskReps */ - *uint_ptr = icmpinaddrmaskreps; + *uint_ptr = STATS_GET(mib2.icmpinaddrmaskreps); break; case 14: /* icmpOutMsgs */ - *uint_ptr = icmpoutmsgs; + *uint_ptr = STATS_GET(mib2.icmpoutmsgs); break; case 15: /* icmpOutErrors */ - *uint_ptr = icmpouterrors; + *uint_ptr = STATS_GET(mib2.icmpouterrors); break; case 16: /* icmpOutDestUnreachs */ - *uint_ptr = icmpoutdestunreachs; + *uint_ptr = STATS_GET(mib2.icmpoutdestunreachs); break; case 17: /* icmpOutTimeExcds */ - *uint_ptr = icmpouttimeexcds; + *uint_ptr = STATS_GET(mib2.icmpouttimeexcds); break; case 18: /* icmpOutParmProbs */ - *uint_ptr = icmpoutparmprobs; + *uint_ptr = STATS_GET(mib2.icmpoutparmprobs); break; case 19: /* icmpOutSrcQuenchs */ - *uint_ptr = icmpoutsrcquenchs; + *uint_ptr = STATS_GET(mib2.icmpoutsrcquenchs); break; case 20: /* icmpOutRedirects */ - *uint_ptr = icmpoutredirects; + *uint_ptr = STATS_GET(mib2.icmpoutredirects); break; case 21: /* icmpOutEchos */ - *uint_ptr = icmpoutechos; + *uint_ptr = STATS_GET(mib2.icmpoutechos); break; case 22: /* icmpOutEchoReps */ - *uint_ptr = icmpoutechoreps; + *uint_ptr = STATS_GET(mib2.icmpoutechoreps); break; case 23: /* icmpOutTimestamps */ - *uint_ptr = icmpouttimestamps; + *uint_ptr = STATS_GET(mib2.icmpouttimestamps); break; case 24: /* icmpOutTimestampReps */ - *uint_ptr = icmpouttimestampreps; + *uint_ptr = STATS_GET(mib2.icmpouttimestampreps); break; case 25: /* icmpOutAddrMasks */ - *uint_ptr = icmpoutaddrmasks; + *uint_ptr = STATS_GET(mib2.icmpoutaddrmasks); break; case 26: /* icmpOutAddrMaskReps */ - *uint_ptr = icmpoutaddrmaskreps; + *uint_ptr = STATS_GET(mib2.icmpoutaddrmaskreps); break; default: LWIP_DEBUGF(SNMP_MIB_DEBUG,("icmp_get_value(): unknown id: %d\n", id)); @@ -3691,16 +3297,16 @@ tcp_get_value(struct obj_def *od, u16_t len, void *value) *sint_ptr = MEMP_NUM_TCP_PCB; break; case 5: /* tcpActiveOpens */ - *uint_ptr = tcpactiveopens; + *uint_ptr = STATS_GET(mib2.tcpactiveopens); break; case 6: /* tcpPassiveOpens */ - *uint_ptr = tcppassiveopens; + *uint_ptr = STATS_GET(mib2.tcppassiveopens); break; case 7: /* tcpAttemptFails */ - *uint_ptr = tcpattemptfails; + *uint_ptr = STATS_GET(mib2.tcpattemptfails); break; case 8: /* tcpEstabResets */ - *uint_ptr = tcpestabresets; + *uint_ptr = STATS_GET(mib2.tcpestabresets); break; case 9: /* tcpCurrEstab */ { @@ -3719,19 +3325,19 @@ tcp_get_value(struct obj_def *od, u16_t len, void *value) } break; case 10: /* tcpInSegs */ - *uint_ptr = tcpinsegs; + *uint_ptr = STATS_GET(mib2.tcpinsegs); break; case 11: /* tcpOutSegs */ - *uint_ptr = tcpoutsegs; + *uint_ptr = STATS_GET(mib2.tcpoutsegs); break; case 12: /* tcpRetransSegs */ - *uint_ptr = tcpretranssegs; + *uint_ptr = STATS_GET(mib2.tcpretranssegs); break; case 14: /* tcpInErrs */ - *uint_ptr = tcpinerrs; + *uint_ptr = STATS_GET(mib2.tcpinerrs); break; case 15: /* tcpOutRsts */ - *uint_ptr = tcpoutrsts; + *uint_ptr = STATS_GET(mib2.tcpoutrsts); break; default: LWIP_DEBUGF(SNMP_MIB_DEBUG,("tcp_get_value(): unknown id: %d\n", id)); @@ -3845,16 +3451,16 @@ udp_get_value(struct obj_def *od, u16_t len, void *value) switch (id) { case 1: /* udpInDatagrams */ - *uint_ptr = udpindatagrams; + *uint_ptr = STATS_GET(mib2.udpindatagrams); break; case 2: /* udpNoPorts */ - *uint_ptr = udpnoports; + *uint_ptr = STATS_GET(mib2.udpnoports); break; case 3: /* udpInErrors */ - *uint_ptr = udpinerrors; + *uint_ptr = STATS_GET(mib2.udpinerrors); break; case 4: /* udpOutDatagrams */ - *uint_ptr = udpoutdatagrams; + *uint_ptr = STATS_GET(mib2.udpoutdatagrams); break; default: LWIP_DEBUGF(SNMP_MIB_DEBUG,("udp_get_value(): unknown id: %d\n", id)); diff --git a/src/core/snmp/msg_in.c b/src/core/snmp/msg_in.c index e4b7ad8a..61c9cd20 100644 --- a/src/core/snmp/msg_in.c +++ b/src/core/snmp/msg_in.c @@ -925,7 +925,7 @@ snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, } /* accepting request */ - snmp_inc_snmpinpkts(); + mib2_inc_snmpinpkts(); /* record used 'protocol control block' */ msg_ps->pcb = pcb; /* source address (network order) */ @@ -1006,7 +1006,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, (pdu_len != (1 + len_octets + len)) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ))) { - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } ofs += (1 + len_octets); @@ -1015,20 +1015,20 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) { /* can't decode or no integer (version) */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &version); if (derr != ERR_OK) { /* can't decode */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } if (version != 0) { /* not version 1 */ - snmp_inc_snmpinbadversions(); + mib2_inc_snmpinbadversions(); return ERR_ARG; } m_stat->version = (u8_t)version; @@ -1038,13 +1038,13 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR))) { /* can't decode or no octet string (community) */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } derr = snmp_asn1_dec_raw(p, ofs + 1 + len_octets, len, SNMP_COMMUNITY_STR_LEN, m_stat->community); if (derr != ERR_OK) { - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } /* add zero terminator */ @@ -1060,7 +1060,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if (type == (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_SET_REQ)) { /* wrong community for SetRequest PDU */ - snmp_inc_snmpinbadcommunitynames(); + mib2_inc_snmpinbadcommunitynames(); snmp_authfail_trap(); return ERR_ARG; } @@ -1069,7 +1069,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, #endif /* SNMP_COMMUNITY_EXT */ if (strncmp(snmp_community, (const char*)m_stat->community, SNMP_COMMUNITY_STR_LEN) != 0) { - snmp_inc_snmpinbadcommunitynames(); + mib2_inc_snmpinbadcommunitynames(); snmp_authfail_trap(); return ERR_ARG; } @@ -1077,38 +1077,38 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, derr = snmp_asn1_dec_length(p, ofs+1, &len_octets, &len); if (derr != ERR_OK) { - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } switch(type) { case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_REQ): /* GetRequest PDU */ - snmp_inc_snmpingetrequests(); + mib2_inc_snmpingetrequests(); derr = ERR_OK; break; case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_NEXT_REQ): /* GetNextRequest PDU */ - snmp_inc_snmpingetnexts(); + mib2_inc_snmpingetnexts(); derr = ERR_OK; break; case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_GET_RESP): /* GetResponse PDU */ - snmp_inc_snmpingetresponses(); + mib2_inc_snmpingetresponses(); derr = ERR_ARG; break; case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_SET_REQ): /* SetRequest PDU */ - snmp_inc_snmpinsetrequests(); + mib2_inc_snmpinsetrequests(); derr = ERR_OK; break; case (SNMP_ASN1_CONTXT | SNMP_ASN1_CONSTR | SNMP_ASN1_PDU_TRAP): /* Trap PDU */ - snmp_inc_snmpintraps(); + mib2_inc_snmpintraps(); derr = ERR_ARG; break; default: - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); derr = ERR_ARG; break; } @@ -1122,7 +1122,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if (len != (pdu_len - (ofs - ofs_base))) { /* decoded PDU length does not equal actual payload length */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } snmp_asn1_dec_type(p, ofs, &type); @@ -1130,14 +1130,14 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) { /* can't decode or no integer (request ID) */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } derr = snmp_asn1_dec_s32t(p, ofs + 1 + len_octets, len, &m_stat->rid); if (derr != ERR_OK) { /* can't decode */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } ofs += (1 + len_octets + len); @@ -1146,7 +1146,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) { /* can't decode or no integer (error-status) */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } /* must be noError (0) for incoming requests. @@ -1155,7 +1155,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if (derr != ERR_OK) { /* can't decode */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } switch (m_stat->error_status) @@ -1164,19 +1164,19 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, /* nothing to do */ break; case SNMP_ES_TOOBIG: - snmp_inc_snmpintoobigs(); + mib2_inc_snmpintoobigs(); break; case SNMP_ES_NOSUCHNAME: - snmp_inc_snmpinnosuchnames(); + mib2_inc_snmpinnosuchnames(); break; case SNMP_ES_BADVALUE: - snmp_inc_snmpinbadvalues(); + mib2_inc_snmpinbadvalues(); break; case SNMP_ES_READONLY: - snmp_inc_snmpinreadonlys(); + mib2_inc_snmpinreadonlys(); break; case SNMP_ES_GENERROR: - snmp_inc_snmpingenerrs(); + mib2_inc_snmpingenerrs(); break; default: LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_pdu_header_check(): unknown error_status: %d\n", (int)m_stat->error_status)); @@ -1188,7 +1188,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG))) { /* can't decode or no integer (error-index) */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } /* must be 0 for incoming requests. @@ -1197,7 +1197,7 @@ snmp_pdu_header_check(struct pbuf *p, u16_t ofs, u16_t pdu_len, u16_t *ofs_ret, if (derr != ERR_OK) { /* can't decode */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } ofs += (1 + len_octets + len); @@ -1219,7 +1219,7 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ))) { - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); return ERR_ARG; } ofs += (1 + len_octets); @@ -1240,7 +1240,7 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ (type != (SNMP_ASN1_UNIV | SNMP_ASN1_CONSTR | SNMP_ASN1_SEQ)) || (len == 0) || (len > vb_len)) { - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); /* free varbinds (if available) */ snmp_varbind_list_free(&m_stat->invb); return ERR_ARG; @@ -1253,7 +1253,7 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ if ((derr != ERR_OK) || (type != (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OBJ_ID))) { /* can't decode object name length */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); /* free varbinds (if available) */ snmp_varbind_list_free(&m_stat->invb); return ERR_ARG; @@ -1262,7 +1262,7 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ if (derr != ERR_OK) { /* can't decode object name */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); /* free varbinds (if available) */ snmp_varbind_list_free(&m_stat->invb); return ERR_ARG; @@ -1275,7 +1275,7 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ if (derr != ERR_OK) { /* can't decode object value length */ - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); /* free varbinds (if available) */ snmp_varbind_list_free(&m_stat->invb); return ERR_ARG; @@ -1388,7 +1388,7 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ } if (derr != ERR_OK) { - snmp_inc_snmpinasnparseerrs(); + mib2_inc_snmpinasnparseerrs(); /* free varbinds (if available) */ snmp_varbind_list_free(&m_stat->invb); return ERR_ARG; @@ -1399,11 +1399,11 @@ snmp_pdu_dec_varbindlist(struct pbuf *p, u16_t ofs, u16_t *ofs_ret, struct snmp_ if (m_stat->rt == SNMP_ASN1_PDU_SET_REQ) { - snmp_add_snmpintotalsetvars(m_stat->invb.count); + mib2_add_snmpintotalsetvars(m_stat->invb.count); } else { - snmp_add_snmpintotalreqvars(m_stat->invb.count); + mib2_add_snmpintotalreqvars(m_stat->invb.count); } *ofs_ret = ofs; diff --git a/src/core/snmp/msg_out.c b/src/core/snmp/msg_out.c index 2d5096c1..134690bb 100644 --- a/src/core/snmp/msg_out.c +++ b/src/core/snmp/msg_out.c @@ -49,8 +49,10 @@ #include "lwip/udp.h" #include "lwip/netif.h" #include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/snmp_asn1.h" #include "lwip/snmp_msg.h" +#include "lwip/sys.h" #include @@ -159,23 +161,23 @@ snmp_send_response(struct snmp_msg_pstat *m_stat) /* nothing to do */ break; case SNMP_ES_TOOBIG: - snmp_inc_snmpouttoobigs(); + mib2_inc_snmpouttoobigs(); break; case SNMP_ES_NOSUCHNAME: - snmp_inc_snmpoutnosuchnames(); + mib2_inc_snmpoutnosuchnames(); break; case SNMP_ES_BADVALUE: - snmp_inc_snmpoutbadvalues(); + mib2_inc_snmpoutbadvalues(); break; case SNMP_ES_GENERROR: - snmp_inc_snmpoutgenerrs(); + mib2_inc_snmpoutgenerrs(); break; default: LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_send_response(): unknown error_status: %d\n", (int)m_stat->error_status)); break; } - snmp_inc_snmpoutgetresponses(); - snmp_inc_snmpoutpkts(); + mib2_inc_snmpoutgetresponses(); + mib2_inc_snmpoutpkts(); /** @todo do we need separate rx and tx pcbs for threaded case? */ /** connect to the originating source */ @@ -256,9 +258,10 @@ snmp_send_trap(s8_t generic_trap, const struct snmp_obj_id *eoid, s32_t specific else { /* generic (MIB-II) trap */ - snmp_get_snmpgrpid_ptr(&trap_msg.enterprise); + mib2_get_snmpgrpid_ptr(&trap_msg.enterprise); } - snmp_get_sysuptime(&trap_msg.ts); + + MIB2_COPY_SYSUPTIME_TO(&trap_msg.ts); /* pass 0, calculate length fields */ tot_len = snmp_varbind_list_sum(&trap_msg.outvb); @@ -274,8 +277,8 @@ snmp_send_trap(s8_t generic_trap, const struct snmp_obj_id *eoid, s32_t specific ofs = snmp_trap_header_enc(&trap_msg, p); snmp_varbind_list_enc(&trap_msg.outvb, p, ofs); - snmp_inc_snmpouttraps(); - snmp_inc_snmpoutpkts(); + mib2_inc_snmpouttraps(); + mib2_inc_snmpoutpkts(); /** send to the TRAP destination */ udp_sendto(trap_msg.pcb, p, &trap_msg.dip, SNMP_TRAP_PORT); @@ -306,7 +309,7 @@ void snmp_authfail_trap(void) { u8_t enable; - snmp_get_snmpenableauthentraps(&enable); + mib2_get_snmpenableauthentraps(&enable); if (enable == 1) { trap_msg.outvb.head = NULL; diff --git a/src/core/tcp.c b/src/core/tcp.c index 188bcf80..ea8481db 100644 --- a/src/core/tcp.c +++ b/src/core/tcp.c @@ -47,7 +47,6 @@ #include "lwip/def.h" #include "lwip/mem.h" #include "lwip/memp.h" -#include "lwip/snmp.h" #include "lwip/tcp.h" #include "lwip/tcp_impl.h" #include "lwip/debug.h" @@ -231,26 +230,26 @@ tcp_close_shutdown(struct tcp_pcb *pcb, u8_t rst_on_unacked_data) TCP_PCB_REMOVE_ACTIVE(pcb); memp_free(MEMP_TCP_PCB, pcb); pcb = NULL; - snmp_inc_tcpattemptfails(); + MIB2_STATS_INC(mib2.tcpattemptfails); break; case SYN_RCVD: err = tcp_send_fin(pcb); if (err == ERR_OK) { - snmp_inc_tcpattemptfails(); + MIB2_STATS_INC(mib2.tcpattemptfails); pcb->state = FIN_WAIT_1; } break; case ESTABLISHED: err = tcp_send_fin(pcb); if (err == ERR_OK) { - snmp_inc_tcpestabresets(); + MIB2_STATS_INC(mib2.tcpestabresets); pcb->state = FIN_WAIT_1; } break; case CLOSE_WAIT: err = tcp_send_fin(pcb); if (err == ERR_OK) { - snmp_inc_tcpestabresets(); + MIB2_STATS_INC(mib2.tcpestabresets); pcb->state = LAST_ACK; } break; @@ -850,7 +849,7 @@ tcp_connect(struct tcp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port, TCP_RMV(&tcp_bound_pcbs, pcb); } TCP_REG_ACTIVE(pcb); - snmp_inc_tcpactiveopens(); + MIB2_STATS_INC(mib2.tcpactiveopens); tcp_output(pcb); } diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index d718014a..3faad155 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -53,7 +53,6 @@ #include "lwip/memp.h" #include "lwip/inet_chksum.h" #include "lwip/stats.h" -#include "lwip/snmp.h" #include "lwip/ip6.h" #include "lwip/ip6_addr.h" #include "lwip/inet_chksum.h" @@ -117,7 +116,7 @@ tcp_input(struct pbuf *p, struct netif *inp) PERF_START; TCP_STATS_INC(tcp.recv); - snmp_inc_tcpinsegs(); + MIB2_STATS_INC(mib2.tcpinsegs); tcphdr = (struct tcp_hdr *)p->payload; @@ -348,7 +347,7 @@ tcp_input(struct pbuf *p, struct netif *inp) /* pcb has been aborted or refused data is still refused and the new segment contains data */ TCP_STATS_INC(tcp.drop); - snmp_inc_tcpinerrs(); + MIB2_STATS_INC(mib2.tcpinerrs); goto aborted; } } @@ -513,7 +512,7 @@ aborted: return; dropped: TCP_STATS_INC(tcp.drop); - snmp_inc_tcpinerrs(); + MIB2_STATS_INC(mib2.tcpinerrs); pbuf_free(p); } @@ -601,7 +600,7 @@ tcp_listen_input(struct tcp_pcb_listen *pcb) &npcb->remote_ip, PCB_ISIPV6(npcb)); #endif /* TCP_CALCULATE_EFF_SEND_MSS */ - snmp_inc_tcppassiveopens(); + MIB2_STATS_INC(mib2.tcppassiveopens); /* Send a SYN|ACK together with the MSS option. */ rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK); diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c index 567942ed..8c494750 100644 --- a/src/core/tcp_out.c +++ b/src/core/tcp_out.c @@ -50,7 +50,6 @@ #include "lwip/netif.h" #include "lwip/inet_chksum.h" #include "lwip/stats.h" -#include "lwip/snmp.h" #include "lwip/ip6.h" #include "lwip/ip6_addr.h" #include "lwip/inet_chksum.h" @@ -1136,7 +1135,7 @@ tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) struct netif *netif; /** @bug Exclude retransmitted segments from this count. */ - snmp_inc_tcpoutsegs(); + MIB2_STATS_INC(mib2.tcpoutsegs); /* The TCP header has already been constructed, but the ackno and wnd fields remain. */ @@ -1322,7 +1321,7 @@ tcp_rst(u32_t seqno, u32_t ackno, tcphdr->urgp = 0; TCP_STATS_INC(tcp.xmit); - snmp_inc_tcpoutrsts(); + MIB2_STATS_INC(mib2.tcpoutrsts); netif = ip_route(IP_IS_V6(remote_ip), local_ip, remote_ip); if (netif != NULL) { @@ -1422,7 +1421,7 @@ tcp_rexmit(struct tcp_pcb *pcb) pcb->rttest = 0; /* Do the actual retransmission. */ - snmp_inc_tcpretranssegs(); + MIB2_STATS_INC(mib2.tcpretranssegs); /* No need to call tcp_output: we are always called from tcp_input() and thus tcp_output directly returns. */ } diff --git a/src/core/udp.c b/src/core/udp.c index c18255af..aceb71eb 100644 --- a/src/core/udp.c +++ b/src/core/udp.c @@ -62,7 +62,7 @@ #include "lwip/icmp.h" #include "lwip/icmp6.h" #include "lwip/stats.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/dhcp.h" #include @@ -174,7 +174,7 @@ udp_input(struct pbuf *p, struct netif *inp) ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); UDP_STATS_INC(udp.lenerr); UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); + MIB2_STATS_INC(mib2.udpinerrors); pbuf_free(p); goto end; } @@ -363,12 +363,12 @@ udp_input(struct pbuf *p, struct netif *inp) /* Can we cope with this failing? Just assert for now */ LWIP_ASSERT("pbuf_header failed\n", 0); UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); + MIB2_STATS_INC(mib2.udpinerrors); pbuf_free(p); goto end; } if (pcb != NULL) { - snmp_inc_udpindatagrams(); + MIB2_STATS_INC(mib2.udpindatagrams); #if SO_REUSE && SO_REUSE_RXTOALL if ((broadcast || #if LWIP_IPV6 @@ -463,7 +463,7 @@ udp_input(struct pbuf *p, struct netif *inp) #endif /* LWIP_ICMP || LWIP_ICMP6 */ UDP_STATS_INC(udp.proterr); UDP_STATS_INC(udp.drop); - snmp_inc_udpnoports(); + MIB2_STATS_INC(mib2.udpnoports); pbuf_free(p); } } else { @@ -478,7 +478,7 @@ chkerr: ("udp_input: UDP (or UDP Lite) datagram discarded due to failing checksum\n")); UDP_STATS_INC(udp.chkerr); UDP_STATS_INC(udp.drop); - snmp_inc_udpinerrors(); + MIB2_STATS_INC(mib2.udpinerrors); pbuf_free(p); PERF_STOP("udp_input"); #endif /* CHECKSUM_CHECK_UDP */ @@ -881,7 +881,7 @@ udp_sendto_if_src_chksum(struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *d NETIF_SET_HWADDRHINT(netif, NULL); /* TODO: must this be increased even if error occurred? */ - snmp_inc_udpoutdatagrams(); + MIB2_STATS_INC(mib2.udpoutdatagrams); /* did we chain a separate header pbuf earlier? */ if (q != p) { @@ -974,7 +974,7 @@ udp_bind(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) } } pcb->local_port = port; - snmp_insert_udpidx_tree(pcb); + mib2_udp_bind(pcb); /* pcb not active yet? */ if (rebind == 0) { /* place the PCB on the active list if not already there */ @@ -1110,7 +1110,7 @@ udp_remove(struct udp_pcb *pcb) { struct udp_pcb *pcb2; - snmp_delete_udpidx_tree(pcb); + mib2_udp_unbind(pcb); /* pcb to be removed is first in list? */ if (udp_pcbs == pcb) { /* make list start at 2nd pcb */ diff --git a/src/include/lwip/netif.h b/src/include/lwip/netif.h index 6c01faf0..32f99412 100644 --- a/src/include/lwip/netif.h +++ b/src/include/lwip/netif.h @@ -270,8 +270,8 @@ struct netif { char name[2]; /** number of this interface */ u8_t num; -#if LWIP_SNMP - /** link type (from "snmp_ifType" enum from snmp.h) */ +#if MIB2_STATS + /** link type (from "snmp_ifType" enum from snmp_mib2.h) */ u8_t link_type; /** (estimate) link speed */ u32_t link_speed; @@ -280,13 +280,13 @@ struct netif { /** counters */ u32_t ifinoctets; u32_t ifinucastpkts; - u32_t ifinnucastpkts; + u32_t ifinnucastpkts; /* @todo: never incremented */ u32_t ifindiscards; u32_t ifoutoctets; u32_t ifoutucastpkts; u32_t ifoutnucastpkts; u32_t ifoutdiscards; -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ #if LWIP_IPV4 && LWIP_IGMP /** This function could be called to add or delete an entry in the multicast filter table of the ethernet MAC.*/ @@ -319,26 +319,6 @@ struct netif { #define IF__NETIF_CHECKSUM_ENABLED(netif, chksumflag) #endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ -#if LWIP_SNMP -#define NETIF_INIT_SNMP(netif, type, speed) do { \ - /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ - (netif)->link_type = (type); \ - /* your link speed here (units: bits per second) */ \ - (netif)->link_speed = (speed);\ - (netif)->ts = 0; \ - (netif)->ifinoctets = 0; \ - (netif)->ifinucastpkts = 0; \ - (netif)->ifinnucastpkts = 0; \ - (netif)->ifindiscards = 0; \ - (netif)->ifoutoctets = 0; \ - (netif)->ifoutucastpkts = 0; \ - (netif)->ifoutnucastpkts = 0; \ - (netif)->ifoutdiscards = 0; } while(0) -#else /* LWIP_SNMP */ -#define NETIF_INIT_SNMP(netif, type, speed) -#endif /* LWIP_SNMP */ - - /** The list of network interfaces. */ extern struct netif *netif_list; /** The default network interface. */ diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 0852fe63..c5b25725 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -865,13 +865,26 @@ ---------------------------------- */ /** - * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP - * transport. + * LWIP_SNMP==1: This enables the lwIP SNMP agent. UDP must be available + * for SNMP transport. + * If you want to use your own SNMP agent, leave this disabled. + * To integrate MIB2 of an external agent, you need to enable + * LWIP_MIB2_CALLBACKS and MIB2_STATS. This will give you the callbacks + * and statistics counters you need to get MIB2 working. */ #ifndef LWIP_SNMP #define LWIP_SNMP 0 #endif +/** + * LWIP_MIB2_CALLBACKS==1: Turn on SNMP MIB2 callbacks. + * Turn this on to get callbacks needed to implement MIB2. + * Usually MIB2_STATS should be enabled, too. + */ +#ifndef LWIP_MIB2_CALLBACKS +#define LWIP_MIB2_CALLBACKS LWIP_SNMP +#endif + /** * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will * allow. At least one request buffer is required. @@ -1027,9 +1040,8 @@ * byte order). * * Instead, you can also use an external function: - * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern int my_lookup_function(const char *name, ip_addr_t* result, u8_t reqtype) - * that provides the IP address, returns 1 if found or 0 if not found and gets - * the type of the requested address passed (see LWIP_DNS_ADDRTYPE_*) + * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) + * that returns the IP address or INADDR_NONE if not found. */ #ifndef DNS_LOCAL_HOSTLIST #define DNS_LOCAL_HOSTLIST 0 @@ -1904,6 +1916,13 @@ #define ND6_STATS (LWIP_IPV6) #endif +/** + * MIB2_STATS==1: Stats for SNMP MIB2. + */ +#ifndef MIB2_STATS +#define MIB2_STATS (LWIP_SNMP) +#endif + #else #define LINK_STATS 0 @@ -1923,6 +1942,7 @@ #define IP6_FRAG_STATS 0 #define MLD6_STATS 0 #define ND6_STATS 0 +#define MIB2_STATS 0 #endif /* LWIP_STATS */ diff --git a/src/include/lwip/snmp.h b/src/include/lwip/snmp.h index ed21f6ad..5dcef37b 100644 --- a/src/include/lwip/snmp.h +++ b/src/include/lwip/snmp.h @@ -34,59 +34,14 @@ #define LWIP_HDR_SNMP_H #include "lwip/opt.h" +#include "lwip/snmp_mib2.h" #ifdef __cplusplus extern "C" { #endif -#include "lwip/ip_addr.h" - -struct udp_pcb; -struct netif; - -/** - * @see RFC1213, "MIB-II, 6. Definitions" - */ -enum snmp_ifType { - snmp_ifType_other=1, /* none of the following */ - snmp_ifType_regular1822, - snmp_ifType_hdh1822, - snmp_ifType_ddn_x25, - snmp_ifType_rfc877_x25, - snmp_ifType_ethernet_csmacd, - snmp_ifType_iso88023_csmacd, - snmp_ifType_iso88024_tokenBus, - snmp_ifType_iso88025_tokenRing, - snmp_ifType_iso88026_man, - snmp_ifType_starLan, - snmp_ifType_proteon_10Mbit, - snmp_ifType_proteon_80Mbit, - snmp_ifType_hyperchannel, - snmp_ifType_fddi, - snmp_ifType_lapb, - snmp_ifType_sdlc, - snmp_ifType_ds1, /* T-1 */ - snmp_ifType_e1, /* european equiv. of T-1 */ - snmp_ifType_basicISDN, - snmp_ifType_primaryISDN, /* proprietary serial */ - snmp_ifType_propPointToPointSerial, - snmp_ifType_ppp, - snmp_ifType_softwareLoopback, - snmp_ifType_eon, /* CLNP over IP [11] */ - snmp_ifType_ethernet_3Mbit, - snmp_ifType_nsip, /* XNS over IP */ - snmp_ifType_slip, /* generic SLIP */ - snmp_ifType_ultra, /* ULTRA technologies */ - snmp_ifType_ds3, /* T-3 */ - snmp_ifType_sip, /* SMDS */ - snmp_ifType_frame_relay -}; - #if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ -/** SNMP "sysuptime" Interval */ -#define SNMP_SYSUPTIME_INTERVAL 10 - /** fixed maximum length for object identifier type */ #define LWIP_SNMP_OBJ_ID_LEN 32 @@ -110,268 +65,22 @@ void snmp_set_community_trap(const char * const community); void snmp_set_sysdescr(const u8_t* str, const u8_t* len); void snmp_set_sysobjid(const struct snmp_obj_id *oid); void snmp_get_sysobjid_ptr(const struct snmp_obj_id **oid); -void snmp_inc_sysuptime(void); -void snmp_add_sysuptime(u32_t value); -void snmp_get_sysuptime(u32_t *value); void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen, u8_t bufsize); void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen, u8_t bufsize); void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen, u8_t bufsize); - -/* network interface */ -void snmp_add_ifinoctets(struct netif *ni, u32_t value); -void snmp_inc_ifinucastpkts(struct netif *ni); -void snmp_inc_ifinnucastpkts(struct netif *ni); -void snmp_inc_ifindiscards(struct netif *ni); -void snmp_add_ifoutoctets(struct netif *ni, u32_t value); -void snmp_inc_ifoutucastpkts(struct netif *ni); -void snmp_inc_ifoutnucastpkts(struct netif *ni); -void snmp_inc_ifoutdiscards(struct netif *ni); -void snmp_inc_iflist(void); -void snmp_dec_iflist(void); - -#if LWIP_IPV4 && LWIP_ARP -/* ARP (for atTable and ipNetToMediaTable) */ -void snmp_insert_arpidx_tree(struct netif *ni, ip4_addr_t *ip); -void snmp_delete_arpidx_tree(struct netif *ni, ip4_addr_t *ip); -#else /* LWIP_IPV4 && LWIP_ARP */ -#define snmp_insert_arpidx_tree(ni,ip) -#define snmp_delete_arpidx_tree(ni,ip) -#endif /* LWIP_IPV4 && LWIP_ARP */ - -/* IP */ -void snmp_inc_ipinreceives(void); -void snmp_inc_ipinhdrerrors(void); -void snmp_inc_ipinaddrerrors(void); -void snmp_inc_ipforwdatagrams(void); -void snmp_inc_ipinunknownprotos(void); -void snmp_inc_ipindiscards(void); -void snmp_inc_ipindelivers(void); -void snmp_inc_ipoutrequests(void); -void snmp_inc_ipoutdiscards(void); -void snmp_inc_ipoutnoroutes(void); -void snmp_inc_ipreasmreqds(void); -void snmp_inc_ipreasmoks(void); -void snmp_inc_ipreasmfails(void); -void snmp_inc_ipfragoks(void); -void snmp_inc_ipfragfails(void); -void snmp_inc_ipfragcreates(void); -void snmp_inc_iproutingdiscards(void); -void snmp_insert_ipaddridx_tree(struct netif *ni); -void snmp_delete_ipaddridx_tree(struct netif *ni); -void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni); -void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni); - -/* ICMP */ -void snmp_inc_icmpinmsgs(void); -void snmp_inc_icmpinerrors(void); -void snmp_inc_icmpindestunreachs(void); -void snmp_inc_icmpintimeexcds(void); -void snmp_inc_icmpinparmprobs(void); -void snmp_inc_icmpinsrcquenchs(void); -void snmp_inc_icmpinredirects(void); -void snmp_inc_icmpinechos(void); -void snmp_inc_icmpinechoreps(void); -void snmp_inc_icmpintimestamps(void); -void snmp_inc_icmpintimestampreps(void); -void snmp_inc_icmpinaddrmasks(void); -void snmp_inc_icmpinaddrmaskreps(void); -void snmp_inc_icmpoutmsgs(void); -void snmp_inc_icmpouterrors(void); -void snmp_inc_icmpoutdestunreachs(void); -void snmp_inc_icmpouttimeexcds(void); -void snmp_inc_icmpoutparmprobs(void); -void snmp_inc_icmpoutsrcquenchs(void); -void snmp_inc_icmpoutredirects(void); -void snmp_inc_icmpoutechos(void); -void snmp_inc_icmpoutechoreps(void); -void snmp_inc_icmpouttimestamps(void); -void snmp_inc_icmpouttimestampreps(void); -void snmp_inc_icmpoutaddrmasks(void); -void snmp_inc_icmpoutaddrmaskreps(void); - -/* TCP */ -void snmp_inc_tcpactiveopens(void); -void snmp_inc_tcppassiveopens(void); -void snmp_inc_tcpattemptfails(void); -void snmp_inc_tcpestabresets(void); -void snmp_inc_tcpinsegs(void); -void snmp_inc_tcpoutsegs(void); -void snmp_inc_tcpretranssegs(void); -void snmp_inc_tcpinerrs(void); -void snmp_inc_tcpoutrsts(void); - -/* UDP */ -void snmp_inc_udpindatagrams(void); -void snmp_inc_udpnoports(void); -void snmp_inc_udpinerrors(void); -void snmp_inc_udpoutdatagrams(void); -void snmp_insert_udpidx_tree(struct udp_pcb *pcb); -void snmp_delete_udpidx_tree(struct udp_pcb *pcb); - -/* SNMP */ -void snmp_inc_snmpinpkts(void); -void snmp_inc_snmpoutpkts(void); -void snmp_inc_snmpinbadversions(void); -void snmp_inc_snmpinbadcommunitynames(void); -void snmp_inc_snmpinbadcommunityuses(void); -void snmp_inc_snmpinasnparseerrs(void); -void snmp_inc_snmpintoobigs(void); -void snmp_inc_snmpinnosuchnames(void); -void snmp_inc_snmpinbadvalues(void); -void snmp_inc_snmpinreadonlys(void); -void snmp_inc_snmpingenerrs(void); -void snmp_add_snmpintotalreqvars(u8_t value); -void snmp_add_snmpintotalsetvars(u8_t value); -void snmp_inc_snmpingetrequests(void); -void snmp_inc_snmpingetnexts(void); -void snmp_inc_snmpinsetrequests(void); -void snmp_inc_snmpingetresponses(void); -void snmp_inc_snmpintraps(void); -void snmp_inc_snmpouttoobigs(void); -void snmp_inc_snmpoutnosuchnames(void); -void snmp_inc_snmpoutbadvalues(void); -void snmp_inc_snmpoutgenerrs(void); -void snmp_inc_snmpoutgetrequests(void); -void snmp_inc_snmpoutgetnexts(void); -void snmp_inc_snmpoutsetrequests(void); -void snmp_inc_snmpoutgetresponses(void); -void snmp_inc_snmpouttraps(void); -void snmp_get_snmpgrpid_ptr(const struct snmp_obj_id **oid); void snmp_set_snmpenableauthentraps(u8_t *value); -void snmp_get_snmpenableauthentraps(u8_t *value); - +#else /* LWIP_SNMP support not available */ /* define everything to be empty */ -#else /* system */ #define snmp_set_sysdescr(str, len) -#define snmp_set_sysobjid(oid); +#define snmp_set_sysobjid(oid) #define snmp_get_sysobjid_ptr(oid) -#define snmp_inc_sysuptime() -#define snmp_add_sysuptime(value) -#define snmp_get_sysuptime(value) -#define snmp_set_syscontact(ocstr, ocstrlen, bufsize); -#define snmp_set_sysname(ocstr, ocstrlen, bufsize); -#define snmp_set_syslocation(ocstr, ocstrlen, bufsize); - -/* network interface */ -#define snmp_add_ifinoctets(ni,value) -#define snmp_inc_ifinucastpkts(ni) -#define snmp_inc_ifinnucastpkts(ni) -#define snmp_inc_ifindiscards(ni) -#define snmp_add_ifoutoctets(ni,value) -#define snmp_inc_ifoutucastpkts(ni) -#define snmp_inc_ifoutnucastpkts(ni) -#define snmp_inc_ifoutdiscards(ni) -#define snmp_inc_iflist() -#define snmp_dec_iflist() - -/* ARP */ -#define snmp_insert_arpidx_tree(ni,ip) -#define snmp_delete_arpidx_tree(ni,ip) - -/* IP */ -#define snmp_inc_ipinreceives() -#define snmp_inc_ipinhdrerrors() -#define snmp_inc_ipinaddrerrors() -#define snmp_inc_ipforwdatagrams() -#define snmp_inc_ipinunknownprotos() -#define snmp_inc_ipindiscards() -#define snmp_inc_ipindelivers() -#define snmp_inc_ipoutrequests() -#define snmp_inc_ipoutdiscards() -#define snmp_inc_ipoutnoroutes() -#define snmp_inc_ipreasmreqds() -#define snmp_inc_ipreasmoks() -#define snmp_inc_ipreasmfails() -#define snmp_inc_ipfragoks() -#define snmp_inc_ipfragfails() -#define snmp_inc_ipfragcreates() -#define snmp_inc_iproutingdiscards() -#define snmp_insert_ipaddridx_tree(ni) -#define snmp_delete_ipaddridx_tree(ni) -#define snmp_insert_iprteidx_tree(dflt, ni) -#define snmp_delete_iprteidx_tree(dflt, ni) - -/* ICMP */ -#define snmp_inc_icmpinmsgs() -#define snmp_inc_icmpinerrors() -#define snmp_inc_icmpindestunreachs() -#define snmp_inc_icmpintimeexcds() -#define snmp_inc_icmpinparmprobs() -#define snmp_inc_icmpinsrcquenchs() -#define snmp_inc_icmpinredirects() -#define snmp_inc_icmpinechos() -#define snmp_inc_icmpinechoreps() -#define snmp_inc_icmpintimestamps() -#define snmp_inc_icmpintimestampreps() -#define snmp_inc_icmpinaddrmasks() -#define snmp_inc_icmpinaddrmaskreps() -#define snmp_inc_icmpoutmsgs() -#define snmp_inc_icmpouterrors() -#define snmp_inc_icmpoutdestunreachs() -#define snmp_inc_icmpouttimeexcds() -#define snmp_inc_icmpoutparmprobs() -#define snmp_inc_icmpoutsrcquenchs() -#define snmp_inc_icmpoutredirects() -#define snmp_inc_icmpoutechos() -#define snmp_inc_icmpoutechoreps() -#define snmp_inc_icmpouttimestamps() -#define snmp_inc_icmpouttimestampreps() -#define snmp_inc_icmpoutaddrmasks() -#define snmp_inc_icmpoutaddrmaskreps() -/* TCP */ -#define snmp_inc_tcpactiveopens() -#define snmp_inc_tcppassiveopens() -#define snmp_inc_tcpattemptfails() -#define snmp_inc_tcpestabresets() -#define snmp_inc_tcpinsegs() -#define snmp_inc_tcpoutsegs() -#define snmp_inc_tcpretranssegs() -#define snmp_inc_tcpinerrs() -#define snmp_inc_tcpoutrsts() - -/* UDP */ -#define snmp_inc_udpindatagrams() -#define snmp_inc_udpnoports() -#define snmp_inc_udpinerrors() -#define snmp_inc_udpoutdatagrams() -#define snmp_insert_udpidx_tree(pcb) -#define snmp_delete_udpidx_tree(pcb) - -/* SNMP */ -#define snmp_inc_snmpinpkts() -#define snmp_inc_snmpoutpkts() -#define snmp_inc_snmpinbadversions() -#define snmp_inc_snmpinbadcommunitynames() -#define snmp_inc_snmpinbadcommunityuses() -#define snmp_inc_snmpinasnparseerrs() -#define snmp_inc_snmpintoobigs() -#define snmp_inc_snmpinnosuchnames() -#define snmp_inc_snmpinbadvalues() -#define snmp_inc_snmpinreadonlys() -#define snmp_inc_snmpingenerrs() -#define snmp_add_snmpintotalreqvars(value) -#define snmp_add_snmpintotalsetvars(value) -#define snmp_inc_snmpingetrequests() -#define snmp_inc_snmpingetnexts() -#define snmp_inc_snmpinsetrequests() -#define snmp_inc_snmpingetresponses() -#define snmp_inc_snmpintraps() -#define snmp_inc_snmpouttoobigs() -#define snmp_inc_snmpoutnosuchnames() -#define snmp_inc_snmpoutbadvalues() -#define snmp_inc_snmpoutgenerrs() -#define snmp_inc_snmpoutgetrequests() -#define snmp_inc_snmpoutgetnexts() -#define snmp_inc_snmpoutsetrequests() -#define snmp_inc_snmpoutgetresponses() -#define snmp_inc_snmpouttraps() -#define snmp_get_snmpgrpid_ptr(oid) +#define snmp_set_syscontact(ocstr, ocstrlen, bufsize) +#define snmp_set_sysname(ocstr, ocstrlen, bufsize) +#define snmp_set_syslocation(ocstr, ocstrlen, bufsize) #define snmp_set_snmpenableauthentraps(value) -#define snmp_get_snmpenableauthentraps(value) - #endif /* LWIP_SNMP */ #ifdef __cplusplus diff --git a/src/include/lwip/snmp_mib2.h b/src/include/lwip/snmp_mib2.h new file mode 100644 index 00000000..0da02e93 --- /dev/null +++ b/src/include/lwip/snmp_mib2.h @@ -0,0 +1,185 @@ +/** + * @file + * MIB2 callback functions called from throughout the stack to integrate a MIB2 + * into lwIP (together with MIB2_STATS). + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ +#ifndef LWIP_HDR_SNMP_MIB2_H +#define LWIP_HDR_SNMP_MIB2_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct udp_pcb; +struct netif; + +/* MIB2 statistics functions */ +#if MIB2_STATS /* don't build if not configured for use in lwipopts.h */ +/** + * @see RFC1213, "MIB-II, 6. Definitions" + */ +enum snmp_ifType { + snmp_ifType_other=1, /* none of the following */ + snmp_ifType_regular1822, + snmp_ifType_hdh1822, + snmp_ifType_ddn_x25, + snmp_ifType_rfc877_x25, + snmp_ifType_ethernet_csmacd, + snmp_ifType_iso88023_csmacd, + snmp_ifType_iso88024_tokenBus, + snmp_ifType_iso88025_tokenRing, + snmp_ifType_iso88026_man, + snmp_ifType_starLan, + snmp_ifType_proteon_10Mbit, + snmp_ifType_proteon_80Mbit, + snmp_ifType_hyperchannel, + snmp_ifType_fddi, + snmp_ifType_lapb, + snmp_ifType_sdlc, + snmp_ifType_ds1, /* T-1 */ + snmp_ifType_e1, /* european equiv. of T-1 */ + snmp_ifType_basicISDN, + snmp_ifType_primaryISDN, /* proprietary serial */ + snmp_ifType_propPointToPointSerial, + snmp_ifType_ppp, + snmp_ifType_softwareLoopback, + snmp_ifType_eon, /* CLNP over IP [11] */ + snmp_ifType_ethernet_3Mbit, + snmp_ifType_nsip, /* XNS over IP */ + snmp_ifType_slip, /* generic SLIP */ + snmp_ifType_ultra, /* ULTRA technologies */ + snmp_ifType_ds3, /* T-3 */ + snmp_ifType_sip, /* SMDS */ + snmp_ifType_frame_relay +}; + +/* This macro has a precision of ~49 days because sys_now returns u32_t. #define your own if you want ~490 days. */ +#ifndef MIB2_COPY_SYSUPTIME_TO +#define MIB2_COPY_SYSUPTIME_TO(ptrToVal) (*(ptrToVal) = (sys_now() / 10)) +#endif + +#define MIB2_STATS_NETIF_INC(n, x) do { ++(n)->x; } while(0) +#define MIB2_STATS_NETIF_ADD(n, x, val) do { (n)->x += val; } while(0) + +#define MIB2_INIT_NETIF(netif, type, speed) do { \ + /* use "snmp_ifType" enum from snmp_mib2.h for "type", snmp_ifType_ethernet_csmacd by example */ \ + (netif)->link_type = (type); \ + /* your link speed here (units: bits per second) */ \ + (netif)->link_speed = (speed);\ + (netif)->ts = 0; \ + (netif)->ifinoctets = 0; \ + (netif)->ifinucastpkts = 0; \ + (netif)->ifinnucastpkts = 0; \ + (netif)->ifindiscards = 0; \ + (netif)->ifoutoctets = 0; \ + (netif)->ifoutucastpkts = 0; \ + (netif)->ifoutnucastpkts = 0; \ + (netif)->ifoutdiscards = 0; } while(0) +#else /* MIB2_STATS */ +#ifndef MIB2_COPY_SYSUPTIME_TO +#define MIB2_COPY_SYSUPTIME_TO(ptrToVal) +#endif +#define MIB2_INIT_NETIF(netif, type, speed) +#define MIB2_STATS_NETIF_INC(n, x) +#define MIB2_STATS_NETIF_ADD(n, x, val) +#endif /* MIB2_STATS */ + +/* LWIP MIB2 callbacks */ +#if LWIP_MIB2_CALLBACKS /* don't build if not configured for use in lwipopts.h */ +/* network interface */ +void mib2_netif_added(struct netif *ni); +void mib2_netif_removed(struct netif *ni); + +#if LWIP_IPV4 && LWIP_ARP +/* ARP (for atTable and ipNetToMediaTable) */ +void mib2_add_arp_entry(struct netif *ni, ip4_addr_t *ip); +void mib2_remove_arp_entry(struct netif *ni, ip4_addr_t *ip); +#else /* LWIP_IPV4 && LWIP_ARP */ +#define mib2_add_arp_entry(ni,ip) +#define mib2_remove_arp_entry(ni,ip) +#endif /* LWIP_IPV4 && LWIP_ARP */ + +/* IP */ +void mib2_add_ip4(struct netif *ni); +void mib2_remove_ip4(struct netif *ni); +void mib2_add_route_ip4(u8_t dflt, struct netif *ni); +void mib2_remove_route_ip4(u8_t dflt, struct netif *ni); + +/* UDP */ +void mib2_udp_bind(struct udp_pcb *pcb); +void mib2_udp_unbind(struct udp_pcb *pcb); + +#else /* LWIP_MIB2_CALLBACKS */ +/* LWIP_MIB2_CALLBACKS support not available */ +/* define everything to be empty */ + +/* network interface */ +#define mib2_netif_added(ni) +#define mib2_netif_removed(ni) + +/* ARP */ +#define mib2_add_arp_entry(ni,ip) +#define mib2_remove_arp_entry(ni,ip) + +/* IP */ +#define mib2_add_ip4(ni) +#define mib2_remove_ip4(ni) +#define mib2_add_route_ip4(dflt, ni) +#define mib2_remove_route_ip4(dflt, ni) + +/* UDP */ +#define mib2_udp_bind(pcb) +#define mib2_udp_unbind(pcb) +#endif /* LWIP_MIB2_CALLBACKS */ + +/* for source-code compatibility reasons only, can be removed (not used internally) */ +#define NETIF_INIT_SNMP MIB2_INIT_NETIF +#define snmp_add_ifinoctets(ni,value) MIB2_STATS_NETIF_ADD(ni, ifinoctets, value) +#define snmp_inc_ifinucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifinucastpkts) +#define snmp_inc_ifinnucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifinnucastpkts) +#define snmp_inc_ifindiscards(ni) MIB2_STATS_NETIF_INC(ni, ifindiscards) +#define snmp_add_ifoutoctets(ni,value) MIB2_STATS_NETIF_ADD(ni, ifoutoctets, value) +#define snmp_inc_ifoutucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifoutucastpkts) +#define snmp_inc_ifoutnucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifoutnucastpkts) +#define snmp_inc_ifoutdiscards(ni) MIB2_STATS_NETIF_INC(ni, ifoutdiscards) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_SNMP_MIB2_H */ diff --git a/src/include/lwip/snmp_structs.h b/src/include/lwip/snmp_structs.h index c8293459..4ed28668 100644 --- a/src/include/lwip/snmp_structs.h +++ b/src/include/lwip/snmp_structs.h @@ -259,6 +259,37 @@ const struct mib_node* snmp_expand_tree(const struct mib_node *node, u8_t ident_ u8_t snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident); u8_t snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); +/* SNMP stack internal MIB2 statistics */ +void mib2_inc_snmpinpkts(void); +void mib2_inc_snmpoutpkts(void); +void mib2_inc_snmpinbadversions(void); +void mib2_inc_snmpinbadcommunitynames(void); +void mib2_inc_snmpinbadcommunityuses(void); +void mib2_inc_snmpinasnparseerrs(void); +void mib2_inc_snmpintoobigs(void); +void mib2_inc_snmpinnosuchnames(void); +void mib2_inc_snmpinbadvalues(void); +void mib2_inc_snmpinreadonlys(void); +void mib2_inc_snmpingenerrs(void); +void mib2_add_snmpintotalreqvars(u8_t value); +void mib2_add_snmpintotalsetvars(u8_t value); +void mib2_inc_snmpingetrequests(void); +void mib2_inc_snmpingetnexts(void); +void mib2_inc_snmpinsetrequests(void); +void mib2_inc_snmpingetresponses(void); +void mib2_inc_snmpintraps(void); +void mib2_inc_snmpouttoobigs(void); +void mib2_inc_snmpoutnosuchnames(void); +void mib2_inc_snmpoutbadvalues(void); +void mib2_inc_snmpoutgenerrs(void); +void mib2_inc_snmpoutgetrequests(void); +void mib2_inc_snmpoutgetnexts(void); +void mib2_inc_snmpoutsetrequests(void); +void mib2_inc_snmpoutgetresponses(void); +void mib2_inc_snmpouttraps(void); +void mib2_get_snmpgrpid_ptr(const struct snmp_obj_id **oid); +void mib2_get_snmpenableauthentraps(u8_t *value); + #ifdef __cplusplus } #endif diff --git a/src/include/lwip/stats.h b/src/include/lwip/stats.h index 63853187..d1731c02 100644 --- a/src/include/lwip/stats.h +++ b/src/include/lwip/stats.h @@ -110,6 +110,72 @@ struct stats_sys { struct stats_syselem mbox; }; +struct stats_mib2 { + /* IP */ + u32_t ipinhdrerrors; + u32_t ipinaddrerrors; + u32_t ipinunknownprotos; + u32_t ipindiscards; + u32_t ipindelivers; + u32_t ipoutrequests; + u32_t ipoutdiscards; + u32_t ipoutnoroutes; + u32_t ipreasmoks; /* @todo: never incremented */ + u32_t ipreasmfails; + u32_t ipfragoks; + u32_t ipfragfails; /* @todo: never incremented */ + u32_t ipfragcreates; + u32_t iproutingdiscards; /* @todo: never incremented */ + u32_t ipreasmreqds; + u32_t ipforwdatagrams; + u32_t ipinreceives; + + /* TCP */ + u32_t tcpactiveopens; + u32_t tcppassiveopens; + u32_t tcpattemptfails; + u32_t tcpestabresets; + u32_t tcpoutsegs; + u32_t tcpretranssegs; + u32_t tcpinsegs; + u32_t tcpinerrs; + u32_t tcpoutrsts; + + /* UDP */ + u32_t udpindatagrams; + u32_t udpnoports; + u32_t udpinerrors; + u32_t udpoutdatagrams; + + /* ICMP */ + u32_t icmpinmsgs; + u32_t icmpinerrors; + u32_t icmpindestunreachs; /* @todo: never incremented */ + u32_t icmpintimeexcds; /* @todo: never incremented */ + u32_t icmpinparmprobs; /* @todo: never incremented */ + u32_t icmpinsrcquenchs; /* @todo: never incremented */ + u32_t icmpinredirects; /* @todo: never incremented */ + u32_t icmpinechos; /* @todo: never incremented */ + u32_t icmpinechoreps; /* @todo: never incremented */ + u32_t icmpintimestamps; /* @todo: never incremented */ + u32_t icmpintimestampreps; /* @todo: never incremented */ + u32_t icmpinaddrmasks; /* @todo: never incremented */ + u32_t icmpinaddrmaskreps; /* @todo: never incremented */ + u32_t icmpoutmsgs; + u32_t icmpouterrors; /* @todo: never incremented */ + u32_t icmpoutdestunreachs; /* @todo: never incremented */ + u32_t icmpouttimeexcds; + u32_t icmpoutparmprobs; /* @todo: never incremented */ + u32_t icmpoutsrcquenchs; /* @todo: never incremented */ + u32_t icmpoutredirects; /* @todo: never incremented */ + u32_t icmpoutechos; /* @todo: never incremented */ + u32_t icmpoutechoreps; + u32_t icmpouttimestamps; /* @todo: never incremented */ + u32_t icmpouttimestampreps; /* @todo: never incremented */ + u32_t icmpoutaddrmasks; /* @todo: never incremented */ + u32_t icmpoutaddrmaskreps; /* @todo: never incremented */ +}; + struct stats_ { #if LINK_STATS struct stats_proto link; @@ -159,6 +225,9 @@ struct stats_ { #if ND6_STATS struct stats_proto nd6; #endif +#if MIB2_STATS + struct stats_mib2 mib2; +#endif }; extern struct stats_ lwip_stats; @@ -172,6 +241,7 @@ void stats_init(void); lwip_stats.x.max = lwip_stats.x.used; \ } \ } while(0) +#define STATS_GET(x) lwip_stats.x #else /* LWIP_STATS */ #define stats_init() #define STATS_INC(x) @@ -323,6 +393,12 @@ void stats_init(void); #define ND6_STATS_DISPLAY() #endif +#if MIB2_STATS +#define MIB2_STATS_INC(x) STATS_INC(x) +#else +#define MIB2_STATS_INC(x) +#endif + /* Display of statistics */ #if LWIP_STATS_DISPLAY void stats_display(void); diff --git a/src/netif/etharp.c b/src/netif/etharp.c index 353ac0f1..cd3c24f3 100644 --- a/src/netif/etharp.c +++ b/src/netif/etharp.c @@ -51,7 +51,7 @@ #include "lwip/def.h" #include "lwip/ip.h" #include "lwip/stats.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/dhcp.h" #include "lwip/autoip.h" #include "netif/etharp.h" @@ -184,7 +184,7 @@ static void etharp_free_entry(int i) { /* remove from SNMP ARP index tree */ - snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); + mib2_remove_arp_entry(arp_table[i].netif, &arp_table[i].ipaddr); /* and empty packet queue */ if (arp_table[i].q != NULL) { /* remove all queued packets */ @@ -512,7 +512,7 @@ etharp_update_arp_entry(struct netif *netif, const ip4_addr_t *ipaddr, struct et /* record network interface */ arp_table[i].netif = netif; /* insert in SNMP ARP index tree */ - snmp_insert_arpidx_tree(netif, &arp_table[i].ipaddr); + mib2_add_arp_entry(netif, &arp_table[i].ipaddr); LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: updating stable entry %"S16_F"\n", (s16_t)i)); /* update address */ diff --git a/src/netif/ethernetif.c b/src/netif/ethernetif.c index 7982d118..76766cef 100644 --- a/src/netif/ethernetif.c +++ b/src/netif/ethernetif.c @@ -51,7 +51,7 @@ #include "lwip/mem.h" #include "lwip/pbuf.h" #include "lwip/stats.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/ethip6.h" #include "netif/etharp.h" #include "netif/ppp/pppoe.h" @@ -309,7 +309,7 @@ ethernetif_init(struct netif *netif) * The last argument should be replaced with your link speed, in units * of bits per second. */ - NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); + MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); netif->state = ethernetif; netif->name[0] = IFNAME0; diff --git a/src/netif/ppp/ppp.c b/src/netif/ppp/ppp.c index 26480c1e..2f2deeec 100644 --- a/src/netif/ppp/ppp.c +++ b/src/netif/ppp/ppp.c @@ -87,7 +87,7 @@ #include "lwip/sys.h" #include "lwip/tcpip.h" #include "lwip/api.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/sio.h" #include "lwip/sys.h" #include "lwip/ip4.h" /* for ip4_input() */ @@ -503,7 +503,7 @@ static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u16_t protoc PPPDEBUG(LOG_WARNING, ("pppos_netif_output[%d]: bad IP packet\n", pcb->netif->num)); LINK_STATS_INC(link.proterr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(pcb->netif); + MIB2_STATS_NETIF_INC(pcb->netif, ifoutdiscards); return ERR_VAL; } } @@ -521,7 +521,7 @@ static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u16_t protoc if ((err = mppe_compress(pcb, &pcb->mppe_comp, &pb, protocol)) != ERR_OK) { LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(netif); + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); return err; } @@ -540,7 +540,7 @@ static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u16_t protoc err_rte_drop: LINK_STATS_INC(link.rterr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(netif); + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); return ERR_RTE; } @@ -727,8 +727,8 @@ void ppp_input(ppp_pcb *pcb, struct pbuf *pb) { pbuf_header(pb, -(s16_t)sizeof(protocol)); LINK_STATS_INC(link.recv); - snmp_inc_ifinucastpkts(pcb->netif); - snmp_add_ifinoctets(pcb->netif, pb->tot_len); + MIB2_STATS_NETIF_INC(pcb->netif, ifinucastpkts); + MIB2_STATS_NETIF_ADD(pcb->netif, ifinoctets, pb->tot_len); /* * Toss all non-LCP packets unless LCP is OPEN. @@ -908,7 +908,7 @@ void ppp_input(ppp_pcb *pcb, struct pbuf *pb) { drop: LINK_STATS_INC(link.drop); - snmp_inc_ifindiscards(pcb->netif); + MIB2_STATS_NETIF_INC(pcb->netif, ifindiscards); out: pbuf_free(pb); diff --git a/src/netif/ppp/pppoe.c b/src/netif/ppp/pppoe.c index 1dfa5155..7bf89ece 100644 --- a/src/netif/ppp/pppoe.c +++ b/src/netif/ppp/pppoe.c @@ -79,7 +79,7 @@ #include "lwip/timers.h" #include "lwip/memp.h" #include "lwip/stats.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "netif/ppp/ppp_impl.h" #include "netif/ppp/lcp.h" @@ -206,11 +206,11 @@ static err_t pppoe_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) { struct pppoe_softc *sc = (struct pppoe_softc *)ctx; struct pbuf *ph; /* Ethernet + PPPoE header */ err_t ret; -#if LWIP_SNMP +#if MIB2_STATS u16_t tot_len; -#else /* LWIP_SNMP */ +#else /* MIB2_STATS */ LWIP_UNUSED_ARG(ppp); -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ /* skip address & flags */ pbuf_header(p, -(s16_t)2); @@ -219,26 +219,26 @@ static err_t pppoe_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) { if(!ph) { LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.proterr); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); pbuf_free(p); return ERR_MEM; } pbuf_header(ph, -(s16_t)PPPOE_HEADERLEN); /* hide PPPoE header */ pbuf_cat(ph, p); -#if LWIP_SNMP +#if MIB2_STATS tot_len = ph->tot_len; -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ ret = pppoe_xmit(sc, ph); if (ret != ERR_OK) { LINK_STATS_INC(link.err); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return ret; } - snmp_add_ifoutoctets(ppp->netif, (u16_t)tot_len); - snmp_inc_ifoutucastpkts(ppp->netif); + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, (u16_t)tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); LINK_STATS_INC(link.xmit); return ERR_OK; } @@ -249,18 +249,18 @@ static err_t pppoe_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short struct pbuf *pb; u8_t *pl; err_t err; -#if LWIP_SNMP +#if MIB2_STATS u16_t tot_len; -#else /* LWIP_SNMP */ +#else /* MIB2_STATS */ LWIP_UNUSED_ARG(ppp); -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ /* @todo: try to use pbuf_header() here! */ pb = pbuf_alloc(PBUF_LINK, PPPOE_HEADERLEN + sizeof(protocol), PBUF_RAM); if(!pb) { LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.proterr); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return ERR_MEM; } @@ -270,18 +270,18 @@ static err_t pppoe_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short PUTSHORT(protocol, pl); pbuf_chain(pb, p); -#if LWIP_SNMP +#if MIB2_STATS tot_len = pb->tot_len; -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ if( (err = pppoe_xmit(sc, pb)) != ERR_OK) { LINK_STATS_INC(link.err); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return err; } - snmp_add_ifoutoctets(ppp->netif, tot_len); - snmp_inc_ifoutucastpkts(ppp->netif); + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); LINK_STATS_INC(link.xmit); return ERR_OK; } diff --git a/src/netif/ppp/pppol2tp.c b/src/netif/ppp/pppol2tp.c index 333d1363..5b8f15fd 100644 --- a/src/netif/ppp/pppol2tp.c +++ b/src/netif/ppp/pppol2tp.c @@ -57,7 +57,7 @@ #include "lwip/memp.h" #include "lwip/netif.h" #include "lwip/udp.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "netif/ppp/ppp_impl.h" #include "netif/ppp/lcp.h" @@ -175,36 +175,36 @@ static err_t pppol2tp_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) { pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; struct pbuf *ph; /* UDP + L2TP header */ err_t ret; -#if LWIP_SNMP +#if MIB2_STATS u16_t tot_len; -#else /* LWIP_SNMP */ +#else /* MIB2_STATS */ LWIP_UNUSED_ARG(ppp); -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ ph = pbuf_alloc(PBUF_TRANSPORT, (u16_t)(PPPOL2TP_OUTPUT_DATA_HEADER_LEN), PBUF_RAM); if(!ph) { LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.proterr); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); pbuf_free(p); return ERR_MEM; } pbuf_header(ph, -(s16_t)PPPOL2TP_OUTPUT_DATA_HEADER_LEN); /* hide L2TP header */ pbuf_cat(ph, p); -#if LWIP_SNMP +#if MIB2_STATS tot_len = ph->tot_len; -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ ret = pppol2tp_xmit(l2tp, ph); if (ret != ERR_OK) { LINK_STATS_INC(link.err); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return ret; } - snmp_add_ifoutoctets(ppp->netif, (u16_t)tot_len); - snmp_inc_ifoutucastpkts(ppp->netif); + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, (u16_t)tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); LINK_STATS_INC(link.xmit); return ERR_OK; } @@ -215,18 +215,18 @@ static err_t pppol2tp_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_sh struct pbuf *pb; u8_t *pl; err_t err; -#if LWIP_SNMP +#if MIB2_STATS u16_t tot_len; -#else /* LWIP_SNMP */ +#else /* MIB2_STATS */ LWIP_UNUSED_ARG(ppp); -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ /* @todo: try to use pbuf_header() here! */ pb = pbuf_alloc(PBUF_TRANSPORT, PPPOL2TP_OUTPUT_DATA_HEADER_LEN + sizeof(protocol), PBUF_RAM); if(!pb) { LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.proterr); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return ERR_MEM; } @@ -236,18 +236,18 @@ static err_t pppol2tp_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_sh PUTSHORT(protocol, pl); pbuf_chain(pb, p); -#if LWIP_SNMP +#if MIB2_STATS tot_len = pb->tot_len; -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ if( (err = pppol2tp_xmit(l2tp, pb)) != ERR_OK) { LINK_STATS_INC(link.err); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return err; } - snmp_add_ifoutoctets(ppp->netif, tot_len); - snmp_inc_ifoutucastpkts(ppp->netif); + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); LINK_STATS_INC(link.xmit); return ERR_OK; } diff --git a/src/netif/ppp/pppos.c b/src/netif/ppp/pppos.c index dc418e9a..07a2dade 100644 --- a/src/netif/ppp/pppos.c +++ b/src/netif/ppp/pppos.c @@ -41,7 +41,7 @@ #include "lwip/sys.h" #include "lwip/memp.h" #include "lwip/netif.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/tcpip.h" #include "lwip/api.h" #include "lwip/sio.h" @@ -211,7 +211,7 @@ pppos_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) PPPDEBUG(LOG_WARNING, ("pppos_write[%d]: alloc fail\n", ppp->netif->num)); LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); pbuf_free(p); return ERR_MEM; } @@ -257,7 +257,7 @@ pppos_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u16_t protocol) PPPDEBUG(LOG_WARNING, ("pppos_netif_output[%d]: alloc fail\n", ppp->netif->num)); LINK_STATS_INC(link.memerr); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); return ERR_MEM; } @@ -575,7 +575,7 @@ pppos_input(ppp_pcb *ppp, u8_t *s, int l) PPPDEBUG(LOG_ERR, ("pppos_input[%d]: tcpip_callback() failed, dropping packet\n", ppp->netif->num)); pbuf_free(inp); LINK_STATS_INC(link.drop); - snmp_inc_ifindiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifindiscards); } #else /* PPP_INPROC_IRQ_SAFE */ ppp_input(ppp, inp); @@ -736,7 +736,7 @@ static void pppos_input_callback(void *arg) { drop: LINK_STATS_INC(link.drop); - snmp_inc_ifindiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifindiscards); pbuf_free(pb); } #endif /* PPP_INPROC_IRQ_SAFE */ @@ -838,7 +838,7 @@ pppos_input_drop(pppos_pcb *pppos) #endif /* VJ_SUPPORT */ LINK_STATS_INC(link.drop); - snmp_inc_ifindiscards(pppos->ppp->netif); + MIB2_STATS_NETIF_INC(pppos->ppp->netif, ifindiscards); } /* @@ -884,9 +884,9 @@ pppos_output_append(pppos_pcb *pppos, err_t err, struct pbuf *nb, u8_t c, u8_t a static err_t pppos_output_last(pppos_pcb *pppos, err_t err, struct pbuf *nb, u16_t *fcs) { -#if LWIP_SNMP +#if MIB2_STATS ppp_pcb *ppp = pppos->ppp; -#endif /* LWIP_SNMP */ +#endif /* MIB2_STATS */ /* Add FCS and trailing flag. */ err = pppos_output_append(pppos, err, nb, ~(*fcs) & 0xFF, 1, NULL); @@ -907,8 +907,8 @@ pppos_output_last(pppos_pcb *pppos, err_t err, struct pbuf *nb, u16_t *fcs) } pppos->last_xmit = sys_jiffies(); - snmp_add_ifoutoctets(ppp->netif, nb->tot_len); - snmp_inc_ifoutucastpkts(ppp->netif); + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, nb->tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); LINK_STATS_INC(link.xmit); pbuf_free(nb); return ERR_OK; @@ -917,7 +917,7 @@ failed: pppos->last_xmit = 0; /* prepend PPP_FLAG to next packet */ LINK_STATS_INC(link.err); LINK_STATS_INC(link.drop); - snmp_inc_ifoutdiscards(ppp->netif); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); pbuf_free(nb); return err; } diff --git a/src/netif/slipif.c b/src/netif/slipif.c index f1765de7..83212087 100644 --- a/src/netif/slipif.c +++ b/src/netif/slipif.c @@ -63,7 +63,7 @@ #include "lwip/def.h" #include "lwip/pbuf.h" #include "lwip/stats.h" -#include "lwip/snmp.h" +#include "lwip/snmp_mib2.h" #include "lwip/sys.h" #include "lwip/sio.h" @@ -396,7 +396,7 @@ slipif_init(struct netif *netif) netif->state = priv; /* initialize the snmp variables and counters inside the struct netif */ - NETIF_INIT_SNMP(netif, snmp_ifType_slip, SLIP_SIO_SPEED(priv->sd)); + MIB2_INIT_NETIF(netif, snmp_ifType_slip, SLIP_SIO_SPEED(priv->sd)); #if SLIP_USE_RX_THREAD /* Create a thread to poll the serial line. */