From 68fbfa26e8f0ac7d105178ec826606c2eb7a69d0 Mon Sep 17 00:00:00 2001 From: itojun Date: Thu, 18 Oct 2001 09:12:13 +0000 Subject: [PATCH] gather stats on raw ip6 socket. sync with kame --- distrib/sets/lists/comp/mi | 3 ++- sys/netinet6/Makefile | 5 ++-- sys/netinet6/raw_ip6.c | 31 +++++++++++++++------- sys/netinet6/raw_ip6.h | 54 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 sys/netinet6/raw_ip6.h diff --git a/distrib/sets/lists/comp/mi b/distrib/sets/lists/comp/mi index 0d3770d6913a..e01519fa0762 100644 --- a/distrib/sets/lists/comp/mi +++ b/distrib/sets/lists/comp/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.383 2001/10/17 05:22:32 jmc Exp $ +# $NetBSD: mi,v 1.384 2001/10/18 09:12:13 itojun Exp $ ./sys comp-sysutil-root ./usr/bin/addr2line comp-debug-bin ./usr/bin/ar comp-util-bin @@ -583,6 +583,7 @@ ./usr/include/netinet6/nd6.h comp-c-include ./usr/include/netinet6/pim6.h comp-c-include ./usr/include/netinet6/pim6_var.h comp-c-include +./usr/include/netinet6/raw_ip6.h comp-c-include ./usr/include/netinet6/udp6.h comp-c-include ./usr/include/netinet6/udp6_var.h comp-c-include ./usr/include/netisdn/i4b_cause.h comp-c-include diff --git a/sys/netinet6/Makefile b/sys/netinet6/Makefile index e909865c30f1..77cfcc6936c0 100644 --- a/sys/netinet6/Makefile +++ b/sys/netinet6/Makefile @@ -1,10 +1,11 @@ -# $NetBSD: Makefile,v 1.4 2000/06/04 11:52:10 itojun Exp $ +# $NetBSD: Makefile,v 1.5 2001/10/18 09:12:14 itojun Exp $ KDIR= /sys/netinet6 INCSDIR= /usr/include/netinet6 INCS= ah.h esp.h in6.h in6_gif.h in6_ifattach.h in6_pcb.h \ in6_var.h ip6_mroute.h ip6_var.h ip6protosw.h \ - ipcomp.h ipsec.h mld6_var.h nd6.h pim6.h pim6_var.h udp6.h udp6_var.h + ipcomp.h ipsec.h mld6_var.h nd6.h pim6.h pim6_var.h \ + raw_ip6.h udp6.h udp6_var.h .include diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c index aa249a5e49d4..b617eb109fc2 100644 --- a/sys/netinet6/raw_ip6.c +++ b/sys/netinet6/raw_ip6.c @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip6.c,v 1.36 2001/10/18 07:44:35 itojun Exp $ */ +/* $NetBSD: raw_ip6.c,v 1.37 2001/10/18 09:12:14 itojun Exp $ */ /* $KAME: raw_ip6.c,v 1.82 2001/07/23 18:57:56 jinmei Exp $ */ /* @@ -93,6 +93,7 @@ #ifdef ENABLE_DEFAULT_SCOPE #include #endif +#include #ifdef IPSEC #include @@ -112,6 +113,8 @@ struct in6pcb rawin6pcb; * Raw interface to IP6 protocol. */ +struct rip6stat rip6stat; + /* * Initialize raw connection block queue. */ @@ -138,6 +141,8 @@ rip6_input(mp, offp, proto) struct sockaddr_in6 rip6src; struct mbuf *opts = NULL; + rip6stat.rip6s_ipackets++; + #if defined(NFAITH) && 0 < NFAITH if (faithprefix(&ip6->ip6_dst)) { /* send icmp6 host unreach? */ @@ -170,16 +175,18 @@ rip6_input(mp, offp, proto) in6p->in6p_ip6.ip6_nxt != proto) continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr) && - !IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr, &ip6->ip6_dst)) + !IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr, &ip6->ip6_dst)) continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) && - !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src)) - continue; - if (in6p->in6p_cksum != -1 - && in6_cksum(m, ip6->ip6_nxt, *offp, m->m_pkthdr.len - *offp)) - { - /* XXX bark something */ + !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src)) continue; + if (in6p->in6p_cksum != -1) { + rip6stat.rip6s_isum++; + if (in6_cksum(m, ip6->ip6_nxt, *offp, + m->m_pkthdr.len - *offp)) { + rip6stat.rip6s_badsum++; + continue; + } } if (last) { struct mbuf *n; @@ -205,6 +212,7 @@ rip6_input(mp, offp, proto) m_freem(n); if (opts) m_freem(opts); + rip6stat.rip6s_fullsock++; } else sorwakeup(last->in6p_socket); opts = NULL; @@ -233,9 +241,13 @@ rip6_input(mp, offp, proto) m_freem(m); if (opts) m_freem(opts); + rip6stat.rip6s_fullsock++; } else sorwakeup(last->in6p_socket); } else { + rip6stat.rip6s_nosock++; + if (m->m_flags & M_MCAST) + rip6stat.rip6s_nosockmcast++; if (proto == IPPROTO_NONE) m_freem(m); else { @@ -511,7 +523,8 @@ rip6_output(m, va_alist) if (oifp) icmp6_ifoutstat_inc(oifp, type, code); icmp6stat.icp6s_outhist[type]++; - } + } else + rip6stat.rip6s_opackets++; goto freectl; diff --git a/sys/netinet6/raw_ip6.h b/sys/netinet6/raw_ip6.h new file mode 100644 index 000000000000..8409ed5b4958 --- /dev/null +++ b/sys/netinet6/raw_ip6.h @@ -0,0 +1,54 @@ +/* $NetBSD: raw_ip6.h,v 1.1 2001/10/18 09:12:14 itojun Exp $ */ +/* $KAME: raw_ip6.h,v 1.2 2001/05/27 13:28:35 itojun Exp $ */ + +/* + * Copyright (C) 2001 WIDE Project. + * 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. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``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 PROJECT OR CONTRIBUTORS 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. + */ + +#ifndef _NETINET6_RAW_IP6_H_ +#define _NETINET6_RAW_IP6_H_ + +/* + * ICMPv6 stat is counted separately. see netinet/icmp6.h + */ +struct rip6stat { + u_quad_t rip6s_ipackets; /* total input packets */ + u_quad_t rip6s_isum; /* input checksum computations */ + u_quad_t rip6s_badsum; /* of above, checksum error */ + u_quad_t rip6s_nosock; /* no matching socket */ + u_quad_t rip6s_nosockmcast; /* of above, arrived as multicast */ + u_quad_t rip6s_fullsock; /* not delivered, input socket full */ + + u_quad_t rip6s_opackets; /* total output packets */ +}; + +#ifdef _KERNEL +extern struct rip6stat rip6stat; +#endif + +#endif