/opensource.apple.com/source/network_cmds/network_cmds-245.12/netstat.tproj/inet6.c
# · C · 1037 lines · 953 code · 45 blank · 39 comment · 22 complexity · 01844ab53b90bfd9d6895f383c18ded9 MD5 · raw file
Large files are truncated click here to view the full file
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>inet6.c</title>
- <style type="text/css">
- .enscript-comment { font-style: italic; color: rgb(178,34,34); }
- .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
- .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
- .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
- .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
- .enscript-string { font-weight: bold; color: rgb(188,143,143); }
- .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
- .enscript-type { font-weight: bold; color: rgb(34,139,34); }
- .enscript-highlight { text-decoration: underline; color: 0; }
- </style>
- </head>
- <body id="top">
- <h1 style="margin:8px;" id="f1">inet6.c <span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
- <hr/>
- <div></div>
- <pre>
- <span class="enscript-comment">/* BSDI inet.c,v 2.3 1995/10/24 02:19:29 prb Exp */</span>
- <span class="enscript-comment">/*
- * Copyright (c) 1983, 1988, 1993
- * The Regents of the University of California. 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
- *
- * $FreeBSD: src/usr.bin/netstat/inet6.c,v 1.3.2.9 2001/08/10 09:07:09 ru Exp $
- */</span>
- #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">lint</span>
- <span class="enscript-comment">/*
- static char sccsid[] = "@(#)inet6.c 8.4 (Berkeley) 4/20/94";
- */</span>
- #<span class="enscript-reference">endif</span> <span class="enscript-comment">/* not lint */</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/param.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/socket.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/socketvar.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/ioctl.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/sysctl.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><net/route.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><net/if.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><net/if_var.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet/in.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet/ip6.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet/icmp6.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet/in_systm.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet6/in6_pcb.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet6/in6_var.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet6/ip6_var.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet6/pim6_var.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet6/raw_ip6.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><arpa/inet.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netdb.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><stdio.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><string.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><unistd.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"netstat.h"</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">__APPLE__</span>
- #<span class="enscript-reference">define</span> <span class="enscript-variable-name">__unused</span>
- #<span class="enscript-reference">endif</span>
- <span class="enscript-type">char</span> *inet6name (<span class="enscript-type">struct</span> in6_addr *);
- <span class="enscript-type">void</span> inet6print (<span class="enscript-type">struct</span> in6_addr *, <span class="enscript-type">int</span>, <span class="enscript-type">char</span> *, <span class="enscript-type">int</span>);
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> ntop_buf[INET6_ADDRSTRLEN];
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> *ip6nh[] = {
- <span class="enscript-string">"hop by hop"</span>,
- <span class="enscript-string">"ICMP"</span>,
- <span class="enscript-string">"IGMP"</span>,
- <span class="enscript-string">"#3"</span>,
- <span class="enscript-string">"IP"</span>,
- <span class="enscript-string">"#5"</span>,
- <span class="enscript-string">"TCP"</span>,
- <span class="enscript-string">"#7"</span>,
- <span class="enscript-string">"#8"</span>,
- <span class="enscript-string">"#9"</span>,
- <span class="enscript-string">"#10"</span>,
- <span class="enscript-string">"#11"</span>,
- <span class="enscript-string">"#12"</span>,
- <span class="enscript-string">"#13"</span>,
- <span class="enscript-string">"#14"</span>,
- <span class="enscript-string">"#15"</span>,
- <span class="enscript-string">"#16"</span>,
- <span class="enscript-string">"UDP"</span>,
- <span class="enscript-string">"#18"</span>,
- <span class="enscript-string">"#19"</span>,
- <span class="enscript-string">"#20"</span>,
- <span class="enscript-string">"#21"</span>,
- <span class="enscript-string">"IDP"</span>,
- <span class="enscript-string">"#23"</span>,
- <span class="enscript-string">"#24"</span>,
- <span class="enscript-string">"#25"</span>,
- <span class="enscript-string">"#26"</span>,
- <span class="enscript-string">"#27"</span>,
- <span class="enscript-string">"#28"</span>,
- <span class="enscript-string">"TP"</span>,
- <span class="enscript-string">"#30"</span>,
- <span class="enscript-string">"#31"</span>,
- <span class="enscript-string">"#32"</span>,
- <span class="enscript-string">"#33"</span>,
- <span class="enscript-string">"#34"</span>,
- <span class="enscript-string">"#35"</span>,
- <span class="enscript-string">"#36"</span>,
- <span class="enscript-string">"#37"</span>,
- <span class="enscript-string">"#38"</span>,
- <span class="enscript-string">"#39"</span>,
- <span class="enscript-string">"#40"</span>,
- <span class="enscript-string">"IP6"</span>,
- <span class="enscript-string">"#42"</span>,
- <span class="enscript-string">"routing"</span>,
- <span class="enscript-string">"fragment"</span>,
- <span class="enscript-string">"#45"</span>,
- <span class="enscript-string">"#46"</span>,
- <span class="enscript-string">"#47"</span>,
- <span class="enscript-string">"#48"</span>,
- <span class="enscript-string">"#49"</span>,
- <span class="enscript-string">"ESP"</span>,
- <span class="enscript-string">"AH"</span>,
- <span class="enscript-string">"#52"</span>,
- <span class="enscript-string">"#53"</span>,
- <span class="enscript-string">"#54"</span>,
- <span class="enscript-string">"#55"</span>,
- <span class="enscript-string">"#56"</span>,
- <span class="enscript-string">"#57"</span>,
- <span class="enscript-string">"ICMP6"</span>,
- <span class="enscript-string">"no next header"</span>,
- <span class="enscript-string">"destination option"</span>,
- <span class="enscript-string">"#61"</span>,
- <span class="enscript-string">"#62"</span>,
- <span class="enscript-string">"#63"</span>,
- <span class="enscript-string">"#64"</span>,
- <span class="enscript-string">"#65"</span>,
- <span class="enscript-string">"#66"</span>,
- <span class="enscript-string">"#67"</span>,
- <span class="enscript-string">"#68"</span>,
- <span class="enscript-string">"#69"</span>,
- <span class="enscript-string">"#70"</span>,
- <span class="enscript-string">"#71"</span>,
- <span class="enscript-string">"#72"</span>,
- <span class="enscript-string">"#73"</span>,
- <span class="enscript-string">"#74"</span>,
- <span class="enscript-string">"#75"</span>,
- <span class="enscript-string">"#76"</span>,
- <span class="enscript-string">"#77"</span>,
- <span class="enscript-string">"#78"</span>,
- <span class="enscript-string">"#79"</span>,
- <span class="enscript-string">"ISOIP"</span>,
- <span class="enscript-string">"#81"</span>,
- <span class="enscript-string">"#82"</span>,
- <span class="enscript-string">"#83"</span>,
- <span class="enscript-string">"#84"</span>,
- <span class="enscript-string">"#85"</span>,
- <span class="enscript-string">"#86"</span>,
- <span class="enscript-string">"#87"</span>,
- <span class="enscript-string">"#88"</span>,
- <span class="enscript-string">"OSPF"</span>,
- <span class="enscript-string">"#80"</span>,
- <span class="enscript-string">"#91"</span>,
- <span class="enscript-string">"#92"</span>,
- <span class="enscript-string">"#93"</span>,
- <span class="enscript-string">"#94"</span>,
- <span class="enscript-string">"#95"</span>,
- <span class="enscript-string">"#96"</span>,
- <span class="enscript-string">"Ethernet"</span>,
- <span class="enscript-string">"#98"</span>,
- <span class="enscript-string">"#99"</span>,
- <span class="enscript-string">"#100"</span>,
- <span class="enscript-string">"#101"</span>,
- <span class="enscript-string">"#102"</span>,
- <span class="enscript-string">"PIM"</span>,
- <span class="enscript-string">"#104"</span>,
- <span class="enscript-string">"#105"</span>,
- <span class="enscript-string">"#106"</span>,
- <span class="enscript-string">"#107"</span>,
- <span class="enscript-string">"#108"</span>,
- <span class="enscript-string">"#109"</span>,
- <span class="enscript-string">"#110"</span>,
- <span class="enscript-string">"#111"</span>,
- <span class="enscript-string">"#112"</span>,
- <span class="enscript-string">"#113"</span>,
- <span class="enscript-string">"#114"</span>,
- <span class="enscript-string">"#115"</span>,
- <span class="enscript-string">"#116"</span>,
- <span class="enscript-string">"#117"</span>,
- <span class="enscript-string">"#118"</span>,
- <span class="enscript-string">"#119"</span>,
- <span class="enscript-string">"#120"</span>,
- <span class="enscript-string">"#121"</span>,
- <span class="enscript-string">"#122"</span>,
- <span class="enscript-string">"#123"</span>,
- <span class="enscript-string">"#124"</span>,
- <span class="enscript-string">"#125"</span>,
- <span class="enscript-string">"#126"</span>,
- <span class="enscript-string">"#127"</span>,
- <span class="enscript-string">"#128"</span>,
- <span class="enscript-string">"#129"</span>,
- <span class="enscript-string">"#130"</span>,
- <span class="enscript-string">"#131"</span>,
- <span class="enscript-string">"#132"</span>,
- <span class="enscript-string">"#133"</span>,
- <span class="enscript-string">"#134"</span>,
- <span class="enscript-string">"#135"</span>,
- <span class="enscript-string">"#136"</span>,
- <span class="enscript-string">"#137"</span>,
- <span class="enscript-string">"#138"</span>,
- <span class="enscript-string">"#139"</span>,
- <span class="enscript-string">"#140"</span>,
- <span class="enscript-string">"#141"</span>,
- <span class="enscript-string">"#142"</span>,
- <span class="enscript-string">"#143"</span>,
- <span class="enscript-string">"#144"</span>,
- <span class="enscript-string">"#145"</span>,
- <span class="enscript-string">"#146"</span>,
- <span class="enscript-string">"#147"</span>,
- <span class="enscript-string">"#148"</span>,
- <span class="enscript-string">"#149"</span>,
- <span class="enscript-string">"#150"</span>,
- <span class="enscript-string">"#151"</span>,
- <span class="enscript-string">"#152"</span>,
- <span class="enscript-string">"#153"</span>,
- <span class="enscript-string">"#154"</span>,
- <span class="enscript-string">"#155"</span>,
- <span class="enscript-string">"#156"</span>,
- <span class="enscript-string">"#157"</span>,
- <span class="enscript-string">"#158"</span>,
- <span class="enscript-string">"#159"</span>,
- <span class="enscript-string">"#160"</span>,
- <span class="enscript-string">"#161"</span>,
- <span class="enscript-string">"#162"</span>,
- <span class="enscript-string">"#163"</span>,
- <span class="enscript-string">"#164"</span>,
- <span class="enscript-string">"#165"</span>,
- <span class="enscript-string">"#166"</span>,
- <span class="enscript-string">"#167"</span>,
- <span class="enscript-string">"#168"</span>,
- <span class="enscript-string">"#169"</span>,
- <span class="enscript-string">"#170"</span>,
- <span class="enscript-string">"#171"</span>,
- <span class="enscript-string">"#172"</span>,
- <span class="enscript-string">"#173"</span>,
- <span class="enscript-string">"#174"</span>,
- <span class="enscript-string">"#175"</span>,
- <span class="enscript-string">"#176"</span>,
- <span class="enscript-string">"#177"</span>,
- <span class="enscript-string">"#178"</span>,
- <span class="enscript-string">"#179"</span>,
- <span class="enscript-string">"#180"</span>,
- <span class="enscript-string">"#181"</span>,
- <span class="enscript-string">"#182"</span>,
- <span class="enscript-string">"#183"</span>,
- <span class="enscript-string">"#184"</span>,
- <span class="enscript-string">"#185"</span>,
- <span class="enscript-string">"#186"</span>,
- <span class="enscript-string">"#187"</span>,
- <span class="enscript-string">"#188"</span>,
- <span class="enscript-string">"#189"</span>,
- <span class="enscript-string">"#180"</span>,
- <span class="enscript-string">"#191"</span>,
- <span class="enscript-string">"#192"</span>,
- <span class="enscript-string">"#193"</span>,
- <span class="enscript-string">"#194"</span>,
- <span class="enscript-string">"#195"</span>,
- <span class="enscript-string">"#196"</span>,
- <span class="enscript-string">"#197"</span>,
- <span class="enscript-string">"#198"</span>,
- <span class="enscript-string">"#199"</span>,
- <span class="enscript-string">"#200"</span>,
- <span class="enscript-string">"#201"</span>,
- <span class="enscript-string">"#202"</span>,
- <span class="enscript-string">"#203"</span>,
- <span class="enscript-string">"#204"</span>,
- <span class="enscript-string">"#205"</span>,
- <span class="enscript-string">"#206"</span>,
- <span class="enscript-string">"#207"</span>,
- <span class="enscript-string">"#208"</span>,
- <span class="enscript-string">"#209"</span>,
- <span class="enscript-string">"#210"</span>,
- <span class="enscript-string">"#211"</span>,
- <span class="enscript-string">"#212"</span>,
- <span class="enscript-string">"#213"</span>,
- <span class="enscript-string">"#214"</span>,
- <span class="enscript-string">"#215"</span>,
- <span class="enscript-string">"#216"</span>,
- <span class="enscript-string">"#217"</span>,
- <span class="enscript-string">"#218"</span>,
- <span class="enscript-string">"#219"</span>,
- <span class="enscript-string">"#220"</span>,
- <span class="enscript-string">"#221"</span>,
- <span class="enscript-string">"#222"</span>,
- <span class="enscript-string">"#223"</span>,
- <span class="enscript-string">"#224"</span>,
- <span class="enscript-string">"#225"</span>,
- <span class="enscript-string">"#226"</span>,
- <span class="enscript-string">"#227"</span>,
- <span class="enscript-string">"#228"</span>,
- <span class="enscript-string">"#229"</span>,
- <span class="enscript-string">"#230"</span>,
- <span class="enscript-string">"#231"</span>,
- <span class="enscript-string">"#232"</span>,
- <span class="enscript-string">"#233"</span>,
- <span class="enscript-string">"#234"</span>,
- <span class="enscript-string">"#235"</span>,
- <span class="enscript-string">"#236"</span>,
- <span class="enscript-string">"#237"</span>,
- <span class="enscript-string">"#238"</span>,
- <span class="enscript-string">"#239"</span>,
- <span class="enscript-string">"#240"</span>,
- <span class="enscript-string">"#241"</span>,
- <span class="enscript-string">"#242"</span>,
- <span class="enscript-string">"#243"</span>,
- <span class="enscript-string">"#244"</span>,
- <span class="enscript-string">"#245"</span>,
- <span class="enscript-string">"#246"</span>,
- <span class="enscript-string">"#247"</span>,
- <span class="enscript-string">"#248"</span>,
- <span class="enscript-string">"#249"</span>,
- <span class="enscript-string">"#250"</span>,
- <span class="enscript-string">"#251"</span>,
- <span class="enscript-string">"#252"</span>,
- <span class="enscript-string">"#253"</span>,
- <span class="enscript-string">"#254"</span>,
- <span class="enscript-string">"#255"</span>,
- };
- <span class="enscript-comment">/*
- * Dump IP6 statistics structure.
- */</span>
- <span class="enscript-type">void</span>
- <span class="enscript-function-name">ip6_stats</span>(u_long off __unused, <span class="enscript-type">char</span> *name, <span class="enscript-type">int</span> af __unused)
- {
- <span class="enscript-type">struct</span> ip6stat ip6stat;
- <span class="enscript-type">int</span> first, i;
- <span class="enscript-type">int</span> mib[4];
- size_t len;
- mib[0] = CTL_NET;
- mib[1] = PF_INET6;
- mib[2] = IPPROTO_IPV6;
- mib[3] = IPV6CTL_STATS;
- len = <span class="enscript-keyword">sizeof</span> ip6stat;
- memset(&ip6stat, 0, len);
- <span class="enscript-keyword">if</span> (sysctl(mib, 4, &ip6stat, &len, (<span class="enscript-type">void</span> *)0, 0) < 0)
- <span class="enscript-keyword">return</span>;
- printf(<span class="enscript-string">"%s:\n"</span>, name);
- #<span class="enscript-reference">define</span> <span class="enscript-function-name">p</span>(f, m) if (ip6stat.f || sflag <= 1) \
- printf(m, (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.f, plural(ip6stat.f))
- #<span class="enscript-reference">define</span> <span class="enscript-function-name">p1a</span>(f, m) if (ip6stat.f || sflag <= 1) \
- printf(m, (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.f)
- p(ip6s_total, <span class="enscript-string">"\t%llu total packet%s received\n"</span>);
- p1a(ip6s_toosmall, <span class="enscript-string">"\t%llu with size smaller than minimum\n"</span>);
- p1a(ip6s_tooshort, <span class="enscript-string">"\t%llu with data size < data length\n"</span>);
- p1a(ip6s_badoptions, <span class="enscript-string">"\t%llu with bad options\n"</span>);
- p1a(ip6s_badvers, <span class="enscript-string">"\t%llu with incorrect version number\n"</span>);
- p(ip6s_fragments, <span class="enscript-string">"\t%llu fragment%s received\n"</span>);
- p(ip6s_fragdropped, <span class="enscript-string">"\t%llu fragment%s dropped (dup or out of space)\n"</span>);
- p(ip6s_fragtimeout, <span class="enscript-string">"\t%llu fragment%s dropped after timeout\n"</span>);
- p(ip6s_fragoverflow, <span class="enscript-string">"\t%llu fragment%s that exceeded limit\n"</span>);
- p(ip6s_reassembled, <span class="enscript-string">"\t%llu packet%s reassembled ok\n"</span>);
- p(ip6s_delivered, <span class="enscript-string">"\t%llu packet%s for this host\n"</span>);
- p(ip6s_forward, <span class="enscript-string">"\t%llu packet%s forwarded\n"</span>);
- p(ip6s_cantforward, <span class="enscript-string">"\t%llu packet%s not forwardable\n"</span>);
- p(ip6s_redirectsent, <span class="enscript-string">"\t%llu redirect%s sent\n"</span>);
- p(ip6s_localout, <span class="enscript-string">"\t%llu packet%s sent from this host\n"</span>);
- p(ip6s_rawout, <span class="enscript-string">"\t%llu packet%s sent with fabricated ip header\n"</span>);
- p(ip6s_odropped, <span class="enscript-string">"\t%llu output packet%s dropped due to no bufs, etc.\n"</span>);
- p(ip6s_noroute, <span class="enscript-string">"\t%llu output packet%s discarded due to no route\n"</span>);
- p(ip6s_fragmented, <span class="enscript-string">"\t%llu output datagram%s fragmented\n"</span>);
- p(ip6s_ofragments, <span class="enscript-string">"\t%llu fragment%s created\n"</span>);
- p(ip6s_cantfrag, <span class="enscript-string">"\t%llu datagram%s that can't be fragmented\n"</span>);
- p(ip6s_badscope, <span class="enscript-string">"\t%llu packet%s that violated scope rules\n"</span>);
- p(ip6s_notmember, <span class="enscript-string">"\t%llu multicast packet%s which we don't join\n"</span>);
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 256; i++)
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_nxthist[i] != 0) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\tInput histogram:\n"</span>);
- first = 0;
- }
- printf(<span class="enscript-string">"\t\t%s: %llu\n"</span>, ip6nh[i],
- (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.ip6s_nxthist[i]);
- }
- printf(<span class="enscript-string">"\tMbuf statistics:\n"</span>);
- printf(<span class="enscript-string">"\t\t%llu one mbuf\n"</span>, (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.ip6s_m1);
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 32; i++) {
- <span class="enscript-type">char</span> ifbuf[IFNAMSIZ];
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_m2m[i] != 0) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\t\ttwo or more mbuf:\n"</span>);
- first = 0;
- }
- printf(<span class="enscript-string">"\t\t\t%s= %llu\n"</span>,
- if_indextoname(i, ifbuf),
- (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.ip6s_m2m[i]);
- }
- }
- printf(<span class="enscript-string">"\t\t%llu one ext mbuf\n"</span>,
- (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.ip6s_mext1);
- printf(<span class="enscript-string">"\t\t%llu two or more ext mbuf\n"</span>,
- (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.ip6s_mext2m);
- p(ip6s_exthdrtoolong,
- <span class="enscript-string">"\t%llu packet%s whose headers are not continuous\n"</span>);
- p(ip6s_nogif, <span class="enscript-string">"\t%llu tunneling packet%s that can't find gif\n"</span>);
- p(ip6s_toomanyhdr,
- <span class="enscript-string">"\t%llu packet%s discarded due to too may headers\n"</span>);
- <span class="enscript-comment">/* for debugging source address selection */</span>
- #<span class="enscript-reference">define</span> <span class="enscript-function-name">PRINT_SCOPESTAT</span>(s,i) do {\
- <span class="enscript-keyword">switch</span>(i) { <span class="enscript-comment">/* XXX hardcoding in each case */</span>\
- <span class="enscript-keyword">case</span> <span class="enscript-reference">1</span>:\
- p(s, <span class="enscript-string">"\t\t%llu node-local%s\n"</span>);\
- <span class="enscript-keyword">break</span>;\
- <span class="enscript-keyword">case</span> <span class="enscript-reference">2</span>:\
- p(s,<span class="enscript-string">"\t\t%llu link-local%s\n"</span>);\
- <span class="enscript-keyword">break</span>;\
- <span class="enscript-keyword">case</span> <span class="enscript-reference">5</span>:\
- p(s,<span class="enscript-string">"\t\t%llu site-local%s\n"</span>);\
- <span class="enscript-keyword">break</span>;\
- <span class="enscript-keyword">case</span> <span class="enscript-reference">14</span>:\
- p(s,<span class="enscript-string">"\t\t%llu global%s\n"</span>);\
- <span class="enscript-keyword">break</span>;\
- <span class="enscript-reference">default</span>:\
- printf(<span class="enscript-string">"\t\t%llu addresses scope=%x\n"</span>,\
- (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.s, i);\
- }\
- } <span class="enscript-keyword">while</span> (0);
- p(ip6s_sources_none,
- <span class="enscript-string">"\t%llu failure%s of source address selection\n"</span>);
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 16; i++) {
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_sources_sameif[i]) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\tsource addresses on an outgoing I/F\n"</span>);
- first = 0;
- }
- PRINT_SCOPESTAT(ip6s_sources_sameif[i], i);
- }
- }
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 16; i++) {
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_sources_otherif[i]) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\tsource addresses on a non-outgoing I/F\n"</span>);
- first = 0;
- }
- PRINT_SCOPESTAT(ip6s_sources_otherif[i], i);
- }
- }
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 16; i++) {
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_sources_samescope[i]) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\tsource addresses of same scope\n"</span>);
- first = 0;
- }
- PRINT_SCOPESTAT(ip6s_sources_samescope[i], i);
- }
- }
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 16; i++) {
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_sources_otherscope[i]) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\tsource addresses of a different scope\n"</span>);
- first = 0;
- }
- PRINT_SCOPESTAT(ip6s_sources_otherscope[i], i);
- }
- }
- <span class="enscript-keyword">for</span> (first = 1, i = 0; i < 16; i++) {
- <span class="enscript-keyword">if</span> (ip6stat.ip6s_sources_deprecated[i]) {
- <span class="enscript-keyword">if</span> (first) {
- printf(<span class="enscript-string">"\tdeprecated source addresses\n"</span>);
- first = 0;
- }
- PRINT_SCOPESTAT(ip6s_sources_deprecated[i], i);
- }
- }
- p1a(ip6s_forward_cachehit, <span class="enscript-string">"\t%llu forward cache hit\n"</span>);
- p1a(ip6s_forward_cachemiss, <span class="enscript-string">"\t%llu forward cache miss\n"</span>);
- #<span class="enscript-reference">undef</span> <span class="enscript-variable-name">p</span>
- #<span class="enscript-reference">undef</span> <span class="enscript-variable-name">p1a</span>
- }
- <span class="enscript-comment">/*
- * Dump IPv6 per-interface statistics based on RFC 2465.
- */</span>
- <span class="enscript-type">void</span>
- <span class="enscript-function-name">ip6_ifstats</span>(<span class="enscript-type">char</span> *ifname)
- {
- <span class="enscript-type">struct</span> in6_ifreq ifr;
- <span class="enscript-type">int</span> s;
- #<span class="enscript-reference">define</span> <span class="enscript-function-name">p</span>(f, m) if (ifr.ifr_ifru.ifru_stat.f || sflag <= 1) \
- printf(m, (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ifr.ifr_ifru.ifru_stat.f, plural(ifr.ifr_ifru.ifru_stat.f))
- #<span class="enscript-reference">define</span> <span class="enscript-function-name">p_5</span>(f, m) if (ifr.ifr_ifru.ifru_stat.f || sflag <= 1) \
- printf(m, (<span class="enscript-type">unsigned</span> <span class="enscript-type">long</span> <span class="enscript-type">long</span>)ip6stat.f)
- <span class="enscript-keyword">if</span> ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
- perror(<span class="enscript-string">"Warning: socket(AF_INET6)"</span>);
- <span class="enscript-keyword">return</span>;
- }
- strcpy(ifr.ifr_name, ifname);
- printf(<span class="enscript-string">"ip6 on %s:\n"</span>, ifr.ifr_name);
- <span class="enscript-keyword">if</span> (ioctl(s, SIOCGIFSTAT_IN6, (<span class="enscript-type">char</span> *)&ifr) < 0) {
- perror(<span class="enscript-string">"Warning: ioctl(SIOCGIFSTAT_IN6)"</span>);
- <span class="enscript-keyword">goto</span> <span class="enscript-reference">end</span>;
- }
- p(ifs6_in_receive, <span class="enscript-string">"\t%llu total input datagram%s\n"</span>);
- p(ifs6_in_hdrerr, <span class="enscript-string">"\t%llu datagram%s with invalid header received\n"</span>);
- p(ifs6_in_toobig, <span class="enscript-string">"\t%llu datagram%s exceeded MTU received\n"</span>);
- p(ifs6_in_noroute, <span class="enscript-string">"\t%llu datagram%s with no route received\n"</span>);
- p(ifs6_in_addrerr, <span class="enscript-string">"\t%llu datagram%s with invalid dst received\n"</span>);
- p(ifs6_in_protounknown, <span class="enscript-string">"\t%llu datagram%s with unknown proto received\n"</span>);
- p(ifs6_in_truncated, <span class="enscript-string">"\t%llu truncated datagram%s received\n"</span>);
- p(ifs6_in_discard, <span class="enscript-string">"\t%llu input datagram%s discarded\n"</span>);
- p(ifs6_in_deliver,
- <span class="enscript-string">"\t%llu datagram%s delivered to an upper layer protocol\n"</span>);
- p(ifs6_out_forward, <span class="enscript-string">"\t%llu datagram%s forwarded to this interface\n"</span>);
- p(ifs6_out_request,
- <span class="enscript-string">"\t%llu datagram%s sent from an upper layer protocol\n"</span>);
- p(ifs6_out_discard, <span class="enscript-string">"\t%llu total discarded output datagram%s\n"</span>);
- p(ifs6_out_fragok, <span class="enscript-string">"\t%llu output datagram%s fragmented\n"</span>);
- p(ifs6_out_fragfail, <span class="enscript-string">"\t%llu output datagram%s failed on fragment\n"</span>);
- p(ifs6_out_fragcreat, <span class="enscript-string">"\t%llu output datagram%s succeeded on fragment\n"</span>);
- p(ifs6_reass_reqd, <span class="enscript-string">"\t%llu incoming datagram%s fragmented\n"</span>);
- p(ifs6_reass_ok, <span class="enscript-string">"\t%llu datagram%s reassembled\n"</span>);
- p(ifs6_reass_fail, <span class="enscript-string">"\t%llu datagram%s failed on reassembling\n"</span>);
- p(ifs6_in_mcast, <span class="enscript-string">"\t%llu multicast datagram%s received\n"</span>);
- p(ifs6_out_mcast, <span class="enscript-string">"\t%llu multicast datagram%s sent\n"</span>);
- <span class="enscript-reference">end</span>:
- close(s);
- #<span class="enscript-reference">undef</span> <span class="enscript-variable-name">p</span>
- #<span class="enscript-reference">undef</span> <span class="enscript-variable-name">p_5</span>
- }
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> *icmp6names[] = {
- <span class="enscript-string">"#0"</span>,
- <span class="enscript-string">"unreach"</span>,
- <span class="enscript-string">"packet too big"</span>,
- <span class="enscript-string">"time exceed"</span>,
- <span class="enscript-string">"parameter problem"</span>,
- <span class="enscript-string">"#5"</span>,
- <span class="enscript-string">"#6"</span>,
- <span class="enscript-string">"#7"</span>,
- <span class="enscript-string">"#8"</span>,
- <span class="enscript-string">"#9"</span>,
- <span class="enscript-string">"#10"</span>,
- <span class="enscript-string">"#11"</span>,
- <span class="enscript-string">"#12"</span>,
- <span class="enscript-string">"#13"</span>,
- <span class="enscript-string">"#14"</span>,
- <span class="enscript-string">"#15"</span>,
- <span class="enscript-string">"#16"</span>,
- <span class="enscript-string">"#17"</span>,
- <span class="enscript-string">"#18"</span>,
- <span class="enscript-string">"#19"</span>,
- <span class="enscript-string">"#20"</span>,
- <span class="enscript-string">"#21"</span>,
- <span class="enscript-string">"#22"</span>,
- <span class="enscript-string">"#23"</span>,
- <span class="enscript-string">"#24"</span>,
- <span class="enscript-string">"#25"</span>,
- <span class="enscript-string">"#26"</span>,
- <span class="enscript-string">"#27"</span>,
- <span class="enscript-string">"#28"</span>,
- <span class="enscript-string">"#29"</span>,
- <span class="enscript-string">"#30"</span>,
- <span class="enscript-string">"#31"</span>,
- <span class="enscript-string">"#32"</span>,
- <span class="enscript-string">"#33"</span>,
- <span class="enscript-string">"#34"</span>,
- <span class="enscript-string">"#35"</span>,
- <span class="enscript-string">"#36"</span>,
- <span class="enscript-string">"#37"</span>,
- <span class="enscript-string">"#38"</span>,
- <span class="enscript-string">"#39"</span>,
- <span class="enscript-string">"#40"</span>,
- <span class="enscript-string">"#41"</span>,
- <span class="enscript-string">"#42"</span>,
- <span class="enscript-string">"#43"</span>,
- <span class="enscript-string">"#44"</span>,
- <span class="enscript-string">"#45"</span>,
- <span class="enscript-string">"#46"</span>,
- <span class="enscript-string">"#47"</span>,
- <span class="enscript-string">"#48"</span>,
- <span class="enscript-string">"#49"</span>,
- <span class="enscript-string">"#50"</span>,
- <span class="enscript-string">"#51"</span>,
- <span class="enscript-string">"#52"</span>,
- <span class="enscript-string">"#53"</span>,
- <span class="enscript-string">"#54"</span>,
- <span class="enscript-string">"#55"</span>,
- <span class="enscript-string">"#56"</span>,
- <span class="enscript-string">"#57"</span>,
- <span class="enscript-string">"#58"</span>,
- <span class="enscript-string">"#59"</span>,
- <span class="enscript-string">"#60"</span>,
- <span class="enscript-string">"#61"</span>,
- <span class="enscript-string">"#62"</span>,
- <span class="enscript-string">"#63"</span>,
- <span class="enscript-string">"#64"</span>,
- <span class="enscript-string">"#65"</span>,
- <span class="enscript-string">"#66"</span>,
- <span class="enscript-string">"#67"</span>,
- <span class="enscript-string">"#68"</span>,
- <span class="enscript-string">"#69"</span>,
- <span class="enscript-string">"#70"</span>,
- <span class="enscript-string">"#71"</span>,
- <span class="enscript-string">"#72"</span>,
- <span class="enscript-string">"#73"</span>,
- <span class="enscript-string">"#74"</span>,
- <span class="enscript-string">"#75"</span>,
- <span class="enscript-string">"#76"</span>,
- <span class="enscript-string">"#77"</span>,
- <span class="enscript-string">"#78"</span>,
- <span class="enscript-string">"#79"</span>,
- <span class="enscript-string">"#80"</span>,
- <span class="enscript-string">"#81"</span>,
- <span class="enscript-string">"#82"</span>,
- <span class="enscript-string">"#83"</span>,
- <span class="enscript-string">"#84"</span>,
- <span class="enscript-string">"#85"</span>,
- <span class="enscript-string">"#86"</span>,
- <span class="enscript-string">"#87"</span>,
- <span class="enscript-string">"#88"</span>,
- <span class="enscript-string">"#89"</span>,
- <span class="enscript-string">"#80"</span>,
- <span class="enscript-string">"#91"</span>,
- <span class="enscript-string">"#92"</span>,
- <span class="enscript-string">"#93"</span>,
- <span class="enscript-string">"#94"</span>,
- <span class="enscript-string">"#95"</span>,
- <span class="enscript-string">"#96"</span>,
- <span class="enscript-string">"#97"</span>,
- <span class="enscript-string">"#98"</span>,
- <span class="enscript-string">"#99"</span>,
- <span class="enscript-string">"#100"</span>,
- <span class="enscript-string">"#101"</span>,
- <span class="enscript-string">"#102"</span>,
- <span class="enscript-string">"#103"</span>,
- <span class="enscript-string">"#104"</span>,
- <span class="enscript-string">"#105"</span>,
- <span class="enscript-string">"#106"</span>,
- <span class="enscript-string">"#107"</span>,
- <span class="enscript-string">"#108"</span>,
- <span class="enscript-string">"#109"</span>,
- <span class="enscript-string">"#110"</span>,
- <span class="enscript-string">"#111"</span>,
- <span class="enscript-string">"#112"</span>,
- <span class="enscript-string">"#113"</span>,
- <span class="enscript-string">"#114"</span>,
- <span class="enscript-string">"#115"</span>,
- <span class="enscript-string">"#116"</span>,
- <span class="enscript-string">"#117"</span>,
- <span class="enscript-string">"#118"</span>,
- <span class="enscript-string">"#119"</span>,
- <span class="enscript-string">"#120"</span>,
- <span class="enscript-string">"#121"</span>,
- <span class="enscript-string">"#122"</span>,
- <span class="enscript-string">"#123"</span>,
- <span class="enscript-string">"#124"</span>,
- <span class="enscript-string">"#125"</span>,
- <span class="enscript-string">"#126"</span>,
- <span class="enscript-string">"#127"</span>,
- <span class="enscript-string">"echo"</span>,
- <span class="enscript-string">"echo reply"</span>,
- <span class="enscript-string">"multicast listener query"</span>,
- <span class="enscript-string">"multicast listener report"</span>,
- <span class="enscript-string">"multicast listener done"</span>,
- <span class="enscript-string">"router solicitation"</span>,
- <span class="enscript-string">"router advertisement"</span>,
- <span class="enscript-string">"neighbor solicitation"</span>,
- <span class="enscript-string">"neighbor advertisement"</span>,
- <span class="enscript-string">"redirect"</span>,
- <span class="enscript-string">"router renumbering"</span>,
- <span class="enscript-string">"node information request"</span>,
- <span class="enscript-string">"node information reply"</span>,
- <span class="enscript-string">"inverse neighbor solicitation"</span>,
- <span class="enscript-string">"inverse neighbor advertisement"</span>,
- <span class="enscript-string">"#143"</span>,
- <span class="enscript-string">"#144"</span>,
- <span class="enscript-string">"#145"</span>,
- <span class="enscript-string">"#146"</span>,
- <span class="enscript-string">"#147"</span>,
- <span class="enscript-string">"#148"</span>,
- <span class="enscript-string">"#149"</span>,
- <span class="enscript-string">"#150"</span>,
- <span class="enscript-string">"#151"</span>,
- <span class="enscript-string">"#152"</span>,
- <span class="enscript-string">"#153"</span>,
- <span class="enscript-string">"#154"</span>,
- <span class="enscript-string">"#155"</span>,
- <span class="enscript-string">"#156"</span>,
- <span class="enscript-string">"#157"</span>,
- <span class="enscript-string">"#158"</span>,
- <span class="enscript-string">"#159"</span>,
- <span class="enscript-string">"#160"</span>,
- <span class="enscript-string">"#161"</span>,
- <span class="enscript-string">"#162"</span>,
- <span class="enscript-string">"#163"</span>,
- <span class="enscript-string">"#164"</span>,
- <span class="enscript-string">"#165"</span>,
- <span class="enscript-string">"#166"</span>,
- <span class="enscript-string">"#167"</span>,
- <span class="enscript-string">"#168"</span>,
- <span class="enscript-string">"#169"</span>,
- <span class="enscript-string">"#170"</span>,
- <span class="enscript-string">"#171"</span>,
- <span class="enscript-string">"#172"</span>,
- <span class="enscript-string">"#173"</span>,
- <span class="enscript-string">"#174"</span>,
- <span class="enscript-string">"#175"</span>,
- <span class="enscript-string">"#176"</span>,
- <span class="enscript-string">"#177"</span>,
- <span class="enscript-string">"#178"</span>,
- <span class="enscript-string">"#179"</span>,
- <span class="enscript-string">"#180"</span>,
- <span class="enscript-string">"#181"</span>,
- <span class="enscript-string">"#182"</span>,
- <span class="enscript-string">"#183"</span>,
- <span class="enscript-string">"#184"</span>,
- <span class="enscript-string">"#185"</span>,
- <span class="enscript-string">"#186"</span>,
- <span class="enscript-string">"#187"</span>,
- <span class="enscript-string">"#188"</span>,
- <span class="enscript-string">"#189"</span>,
- <span class="enscript-string">"#180"</span>,
- <span class="enscript-string">"#191"</span>,
- <span class="enscript-string">"#192"</span>,
- <span class="enscript-string">"#193"</span>,
- <span class="enscript-string">"#194"</span>,
- <span class="enscript-string">"#195"</span>,
- <span class="enscript-string">"#196"</span>,
- <span class="enscript-string">"#197"</span>,
- <span class="enscript-string">"#198"</span>,
- <span class="enscript-string">"#199"</span>,
- <span class="enscript-string">"#200"</span>,
- <span class="enscript-string">"#201"</span>,
- <span class="enscript-string">"#202"</span>,
- <span class="enscript-string">"#203"</span>,
- <span class="enscript-string">"#204"</span>,
- <span class="enscript-string">"#205"</span>,
- <span class="enscript-string">"#206"</span>,
- <span class="enscript-string">"#207"</span>,
- <span class="enscript-string">"#208"</span>,
- <span class="enscript-string">"#209"</span>,
- <span class="enscript-string">"#210"</span>,
- <span class="enscript-string">"#211"</span>,
- <span class="enscript-string">"#212"</span>,
- <span class="enscript-string">"#213"</span>,
- <span class="enscript-string">"#214"</span>,
- <span class="enscript-string">"#215"</span>,
- <span class="enscript-string">"#216"</span>,
- <span class="enscript-string">"#217"</span>,
- <span class="enscript-string">"#218"</span>,
- <span class="enscript-string">"#219"</span>,
- <span class="enscript-string">"#220"</span>,
- <span class="enscript-string">"#221"</span>,
- <span class="enscript-string">"#222"</span>,
- <span class="enscript-string">"#223"</span>,
- <span class="enscript-string">"#224"</span>,
- <span class="enscript-string">"#225"</span>,
- <span class="enscript-string">"#226"</span>,
- <span class="enscript-string">"#227"</span>,
- <span class="enscript-string">"#228"</span>,
- <span class="enscript-string">"#229"</span>,
- <span class="enscript-string">"#230"</span>,
- <span class="enscript-string">"#231"</span>,
- <span class="enscript-string">"#232"</span>,
- <span class="enscript-string">"#233"</span>,
- <span class="enscript-string">"#234"</span>,
- <span class="enscript-string">"#235"</span>,
- <span class="enscript-string">"#236"</span>,
- <span class="enscript-string">"#237"</span>,
- <span class="enscript-string">"#238"</span>,
- <span class="enscript-string">"#239"</span>,
- <span class="enscript-string">"#240"</span>,
- <span class="enscript-string">"#241"</span>,
- <span class="enscript-string">"#242"</span>,
- <span class="enscript-string">"#243"</span>,
- <span class="enscript-string">"#244"</span>,
- <span class="enscript-string">"#245"</span>,
- <span class="enscript-string">"#246"</span>,
- <span class="enscript-string">"#247"</span>,
- <span class="enscript-string">"#248"</span>,
- <span class="enscript-string">"#249"</span>,
- <span class="enscr…