11eaa5682SMichael Tuexen /*-
21eaa5682SMichael Tuexen * Copyright (c) 2015
31eaa5682SMichael Tuexen * The Regents of the University of California. All rights reserved.
41eaa5682SMichael Tuexen * Michael Tuexen. All rights reserved.
51eaa5682SMichael Tuexen *
61eaa5682SMichael Tuexen * Redistribution and use in source and binary forms, with or without
71eaa5682SMichael Tuexen * modification, are permitted provided that the following conditions
81eaa5682SMichael Tuexen * are met:
91eaa5682SMichael Tuexen * 1. Redistributions of source code must retain the above copyright
101eaa5682SMichael Tuexen * notice, this list of conditions and the following disclaimer.
111eaa5682SMichael Tuexen * 2. Redistributions in binary form must reproduce the above copyright
121eaa5682SMichael Tuexen * notice, this list of conditions and the following disclaimer in the
131eaa5682SMichael Tuexen * documentation and/or other materials provided with the distribution.
14fbbd9655SWarner Losh * 3. Neither the name of the University nor the names of its contributors
151eaa5682SMichael Tuexen * may be used to endorse or promote products derived from this software
161eaa5682SMichael Tuexen * without specific prior written permission.
171eaa5682SMichael Tuexen *
181eaa5682SMichael Tuexen * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
191eaa5682SMichael Tuexen * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
201eaa5682SMichael Tuexen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
211eaa5682SMichael Tuexen * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
221eaa5682SMichael Tuexen * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
231eaa5682SMichael Tuexen * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
241eaa5682SMichael Tuexen * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
251eaa5682SMichael Tuexen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
261eaa5682SMichael Tuexen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
271eaa5682SMichael Tuexen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
281eaa5682SMichael Tuexen * SUCH DAMAGE.
291eaa5682SMichael Tuexen */
301eaa5682SMichael Tuexen
311eaa5682SMichael Tuexen #include <sys/param.h>
321eaa5682SMichael Tuexen #include <sys/types.h>
331eaa5682SMichael Tuexen #include <sys/socket.h>
341eaa5682SMichael Tuexen #include <sys/sysctl.h>
351eaa5682SMichael Tuexen
361eaa5682SMichael Tuexen #include <netinet/sctp.h>
371eaa5682SMichael Tuexen
381eaa5682SMichael Tuexen #include <stdlib.h>
391eaa5682SMichael Tuexen #include <string.h>
401eaa5682SMichael Tuexen
411eaa5682SMichael Tuexen #include "systat.h"
421eaa5682SMichael Tuexen #include "extern.h"
431eaa5682SMichael Tuexen #include "mode.h"
441eaa5682SMichael Tuexen
451eaa5682SMichael Tuexen static struct sctpstat curstat, initstat, oldstat;
461eaa5682SMichael Tuexen
471eaa5682SMichael Tuexen /*-
481eaa5682SMichael Tuexen --0 1 2 3 4 5 6 7
491eaa5682SMichael Tuexen --0123456789012345678901234567890123456789012345678901234567890123456789012345
501eaa5682SMichael Tuexen 00 SCTP Associations SCTP Packets
511eaa5682SMichael Tuexen 01999999999999 associations initiated 999999999999 packets sent
521eaa5682SMichael Tuexen 02999999999999 associations accepted 999999999999 packets received
532caa5afcSMichael Tuexen 03999999999999 associations restarted 999999999999 - out of the blue
542caa5afcSMichael Tuexen 04999999999999 associations terminated 999999999999 - bad vtag
552caa5afcSMichael Tuexen 05999999999999 associations aborted 999999999999 - bad crc32c
562caa5afcSMichael Tuexen 06
572caa5afcSMichael Tuexen 07 SCTP Timers SCTP Chunks
582caa5afcSMichael Tuexen 08999999999999 init timeouts 999999999999 control chunks sent
592caa5afcSMichael Tuexen 09999999999999 cookie timeouts 999999999999 data chunks sent
602caa5afcSMichael Tuexen 10999999999999 data timeouts 999999999999 - ordered
612caa5afcSMichael Tuexen 11999999999999 delayed sack timeouts 999999999999 - unordered
622caa5afcSMichael Tuexen 12999999999999 shutdown timeouts 999999999999 control chunks received
632caa5afcSMichael Tuexen 13999999999999 shutdown-ack timeouts 999999999999 data chunks received
642caa5afcSMichael Tuexen 14999999999999 shutdown guard timeouts 999999999999 - ordered
652caa5afcSMichael Tuexen 15999999999999 heartbeat timeouts 999999999999 - unordered
662caa5afcSMichael Tuexen 16999999999999 path MTU timeouts
672caa5afcSMichael Tuexen 17999999999999 autoclose timeouts SCTP user messages
682caa5afcSMichael Tuexen 18999999999999 asconf timeouts 999999999999 fragmented
692caa5afcSMichael Tuexen 19999999999999 stream reset timeouts 999999999999 reassembled
701eaa5682SMichael Tuexen --0123456789012345678901234567890123456789012345678901234567890123456789012345
711eaa5682SMichael Tuexen --0 1 2 3 4 5 6 7
721eaa5682SMichael Tuexen */
731eaa5682SMichael Tuexen
741eaa5682SMichael Tuexen WINDOW *
opensctp(void)751eaa5682SMichael Tuexen opensctp(void)
761eaa5682SMichael Tuexen {
771eaa5682SMichael Tuexen return (subwin(stdscr, LINES-3-1, 0, MAINWIN_ROW, 0));
781eaa5682SMichael Tuexen }
791eaa5682SMichael Tuexen
801eaa5682SMichael Tuexen void
closesctp(WINDOW * w)811eaa5682SMichael Tuexen closesctp(WINDOW *w)
821eaa5682SMichael Tuexen {
831eaa5682SMichael Tuexen if (w != NULL) {
841eaa5682SMichael Tuexen wclear(w);
851eaa5682SMichael Tuexen wrefresh(w);
861eaa5682SMichael Tuexen delwin(w);
871eaa5682SMichael Tuexen }
881eaa5682SMichael Tuexen }
891eaa5682SMichael Tuexen
901eaa5682SMichael Tuexen void
labelsctp(void)911eaa5682SMichael Tuexen labelsctp(void)
921eaa5682SMichael Tuexen {
931eaa5682SMichael Tuexen wmove(wnd, 0, 0); wclrtoeol(wnd);
941eaa5682SMichael Tuexen #define L(row, str) mvwprintw(wnd, row, 13, str)
951eaa5682SMichael Tuexen #define R(row, str) mvwprintw(wnd, row, 51, str);
961eaa5682SMichael Tuexen L(0, "SCTP Associations"); R(0, "SCTP Packets");
971eaa5682SMichael Tuexen L(1, "associations initiated"); R(1, "packets sent");
981eaa5682SMichael Tuexen L(2, "associations accepted"); R(2, "packets received");
992caa5afcSMichael Tuexen L(3, "associations restarted"); R(3, "- out of the blue");
1002caa5afcSMichael Tuexen L(4, "associations terminated"); R(4, "- bad vtag");
1012caa5afcSMichael Tuexen L(5, "associations aborted"); R(5, "- bad crc32c");
1021eaa5682SMichael Tuexen
1032caa5afcSMichael Tuexen L(7, "SCTP Timers"); R(7, "SCTP Chunks");
1042caa5afcSMichael Tuexen L(8, "init timeouts"); R(8, "control chunks sent");
1052caa5afcSMichael Tuexen L(9, "cookie timeouts"); R(9, "data chunks sent");
1062caa5afcSMichael Tuexen L(10, "data timeouts"); R(10, "- ordered");
1072caa5afcSMichael Tuexen L(11, "delayed sack timeouts"); R(11, "- unordered");
1082caa5afcSMichael Tuexen L(12, "shutdown timeouts"); R(12, "control chunks received");
1092caa5afcSMichael Tuexen L(13, "shutdown-ack timeouts"); R(13, "data chunks received");
1102caa5afcSMichael Tuexen L(14, "shutdown guard timeouts"); R(14, "- ordered");
1112caa5afcSMichael Tuexen L(15, "heartbeat timeouts"); R(15, "- unordered");
1122caa5afcSMichael Tuexen L(16, "path MTU timeouts");
1132caa5afcSMichael Tuexen L(17, "autoclose timeouts"); R(17, "SCTP User Messages");
1142caa5afcSMichael Tuexen L(18, "asconf timeouts"); R(18, "fragmented");
1152caa5afcSMichael Tuexen L(19, "stream reset timeouts"); R(19, "reassembled");
1161eaa5682SMichael Tuexen #undef L
1171eaa5682SMichael Tuexen #undef R
1181eaa5682SMichael Tuexen }
1191eaa5682SMichael Tuexen
1201eaa5682SMichael Tuexen static void
domode(struct sctpstat * ret)1211eaa5682SMichael Tuexen domode(struct sctpstat *ret)
1221eaa5682SMichael Tuexen {
1231eaa5682SMichael Tuexen const struct sctpstat *sub;
1241eaa5682SMichael Tuexen int divisor = 1;
1251eaa5682SMichael Tuexen
1261eaa5682SMichael Tuexen switch(currentmode) {
1271eaa5682SMichael Tuexen case display_RATE:
1281eaa5682SMichael Tuexen sub = &oldstat;
1291eaa5682SMichael Tuexen divisor = (delay > 1000000) ? delay / 1000000 : 1;
1301eaa5682SMichael Tuexen break;
1311eaa5682SMichael Tuexen case display_DELTA:
1321eaa5682SMichael Tuexen sub = &oldstat;
1331eaa5682SMichael Tuexen break;
1341eaa5682SMichael Tuexen case display_SINCE:
1351eaa5682SMichael Tuexen sub = &initstat;
1361eaa5682SMichael Tuexen break;
1371eaa5682SMichael Tuexen default:
1381eaa5682SMichael Tuexen *ret = curstat;
1391eaa5682SMichael Tuexen return;
1401eaa5682SMichael Tuexen }
1411eaa5682SMichael Tuexen #define DO(stat) ret->stat = (curstat.stat - sub->stat) / divisor
1421eaa5682SMichael Tuexen DO(sctps_currestab);
1431eaa5682SMichael Tuexen DO(sctps_activeestab);
1441eaa5682SMichael Tuexen DO(sctps_restartestab);
1451eaa5682SMichael Tuexen DO(sctps_collisionestab);
1461eaa5682SMichael Tuexen DO(sctps_passiveestab);
1471eaa5682SMichael Tuexen DO(sctps_aborted);
1481eaa5682SMichael Tuexen DO(sctps_shutdown);
1491eaa5682SMichael Tuexen DO(sctps_outoftheblue);
1501eaa5682SMichael Tuexen DO(sctps_checksumerrors);
1511eaa5682SMichael Tuexen DO(sctps_outcontrolchunks);
1521eaa5682SMichael Tuexen DO(sctps_outorderchunks);
1531eaa5682SMichael Tuexen DO(sctps_outunorderchunks);
1541eaa5682SMichael Tuexen DO(sctps_incontrolchunks);
1551eaa5682SMichael Tuexen DO(sctps_inorderchunks);
1561eaa5682SMichael Tuexen DO(sctps_inunorderchunks);
1571eaa5682SMichael Tuexen DO(sctps_fragusrmsgs);
1581eaa5682SMichael Tuexen DO(sctps_reasmusrmsgs);
1591eaa5682SMichael Tuexen DO(sctps_outpackets);
1601eaa5682SMichael Tuexen DO(sctps_inpackets);
1611eaa5682SMichael Tuexen
1621eaa5682SMichael Tuexen DO(sctps_recvpackets);
1631eaa5682SMichael Tuexen DO(sctps_recvdatagrams);
1641eaa5682SMichael Tuexen DO(sctps_recvpktwithdata);
1651eaa5682SMichael Tuexen DO(sctps_recvsacks);
1661eaa5682SMichael Tuexen DO(sctps_recvdata);
1671eaa5682SMichael Tuexen DO(sctps_recvdupdata);
1681eaa5682SMichael Tuexen DO(sctps_recvheartbeat);
1691eaa5682SMichael Tuexen DO(sctps_recvheartbeatack);
1701eaa5682SMichael Tuexen DO(sctps_recvecne);
1711eaa5682SMichael Tuexen DO(sctps_recvauth);
1721eaa5682SMichael Tuexen DO(sctps_recvauthmissing);
1731eaa5682SMichael Tuexen DO(sctps_recvivalhmacid);
1741eaa5682SMichael Tuexen DO(sctps_recvivalkeyid);
1751eaa5682SMichael Tuexen DO(sctps_recvauthfailed);
1761eaa5682SMichael Tuexen DO(sctps_recvexpress);
1771eaa5682SMichael Tuexen DO(sctps_recvexpressm);
1781eaa5682SMichael Tuexen DO(sctps_recvswcrc);
1791eaa5682SMichael Tuexen DO(sctps_recvhwcrc);
1801eaa5682SMichael Tuexen
1811eaa5682SMichael Tuexen DO(sctps_sendpackets);
1821eaa5682SMichael Tuexen DO(sctps_sendsacks);
1831eaa5682SMichael Tuexen DO(sctps_senddata);
1841eaa5682SMichael Tuexen DO(sctps_sendretransdata);
1851eaa5682SMichael Tuexen DO(sctps_sendfastretrans);
1861eaa5682SMichael Tuexen DO(sctps_sendmultfastretrans);
1871eaa5682SMichael Tuexen DO(sctps_sendheartbeat);
1881eaa5682SMichael Tuexen DO(sctps_sendecne);
1891eaa5682SMichael Tuexen DO(sctps_sendauth);
1901eaa5682SMichael Tuexen DO(sctps_senderrors);
1911eaa5682SMichael Tuexen DO(sctps_sendswcrc);
1921eaa5682SMichael Tuexen DO(sctps_sendhwcrc);
1931eaa5682SMichael Tuexen
1941eaa5682SMichael Tuexen DO(sctps_pdrpfmbox);
1951eaa5682SMichael Tuexen DO(sctps_pdrpfehos);
1961eaa5682SMichael Tuexen DO(sctps_pdrpmbda);
1971eaa5682SMichael Tuexen DO(sctps_pdrpmbct);
1981eaa5682SMichael Tuexen DO(sctps_pdrpbwrpt);
1991eaa5682SMichael Tuexen DO(sctps_pdrpcrupt);
2001eaa5682SMichael Tuexen DO(sctps_pdrpnedat);
2011eaa5682SMichael Tuexen DO(sctps_pdrppdbrk);
2021eaa5682SMichael Tuexen DO(sctps_pdrptsnnf);
2031eaa5682SMichael Tuexen DO(sctps_pdrpdnfnd);
2041eaa5682SMichael Tuexen DO(sctps_pdrpdiwnp);
2051eaa5682SMichael Tuexen DO(sctps_pdrpdizrw);
2061eaa5682SMichael Tuexen DO(sctps_pdrpbadd);
2071eaa5682SMichael Tuexen DO(sctps_pdrpmark);
2081eaa5682SMichael Tuexen
2091eaa5682SMichael Tuexen DO(sctps_timoiterator);
2101eaa5682SMichael Tuexen DO(sctps_timodata);
2111eaa5682SMichael Tuexen DO(sctps_timowindowprobe);
2121eaa5682SMichael Tuexen DO(sctps_timoinit);
2131eaa5682SMichael Tuexen DO(sctps_timosack);
2141eaa5682SMichael Tuexen DO(sctps_timoshutdown);
2151eaa5682SMichael Tuexen DO(sctps_timoheartbeat);
2161eaa5682SMichael Tuexen DO(sctps_timocookie);
2171eaa5682SMichael Tuexen DO(sctps_timosecret);
2181eaa5682SMichael Tuexen DO(sctps_timopathmtu);
2191eaa5682SMichael Tuexen DO(sctps_timoshutdownack);
2201eaa5682SMichael Tuexen DO(sctps_timoshutdownguard);
2211eaa5682SMichael Tuexen DO(sctps_timostrmrst);
2221eaa5682SMichael Tuexen DO(sctps_timoearlyfr);
2231eaa5682SMichael Tuexen DO(sctps_timoasconf);
2241eaa5682SMichael Tuexen DO(sctps_timodelprim);
2251eaa5682SMichael Tuexen DO(sctps_timoautoclose);
2261eaa5682SMichael Tuexen DO(sctps_timoassockill);
2271eaa5682SMichael Tuexen DO(sctps_timoinpkill);
2281eaa5682SMichael Tuexen
2291eaa5682SMichael Tuexen DO(sctps_hdrops);
2301eaa5682SMichael Tuexen DO(sctps_badsum);
2311eaa5682SMichael Tuexen DO(sctps_noport);
2321eaa5682SMichael Tuexen DO(sctps_badvtag);
2331eaa5682SMichael Tuexen DO(sctps_badsid);
2341eaa5682SMichael Tuexen DO(sctps_nomem);
2351eaa5682SMichael Tuexen DO(sctps_fastretransinrtt);
2361eaa5682SMichael Tuexen DO(sctps_markedretrans);
2371eaa5682SMichael Tuexen DO(sctps_naglesent);
2381eaa5682SMichael Tuexen DO(sctps_naglequeued);
2391eaa5682SMichael Tuexen DO(sctps_maxburstqueued);
2401eaa5682SMichael Tuexen DO(sctps_ifnomemqueued);
2411eaa5682SMichael Tuexen DO(sctps_windowprobed);
2421eaa5682SMichael Tuexen DO(sctps_lowlevelerr);
2431eaa5682SMichael Tuexen DO(sctps_lowlevelerrusr);
2441eaa5682SMichael Tuexen DO(sctps_datadropchklmt);
2451eaa5682SMichael Tuexen DO(sctps_datadroprwnd);
2461eaa5682SMichael Tuexen DO(sctps_ecnereducedcwnd);
2471eaa5682SMichael Tuexen DO(sctps_vtagexpress);
2481eaa5682SMichael Tuexen DO(sctps_vtagbogus);
2491eaa5682SMichael Tuexen DO(sctps_primary_randry);
2501eaa5682SMichael Tuexen DO(sctps_cmt_randry);
2511eaa5682SMichael Tuexen DO(sctps_slowpath_sack);
2521eaa5682SMichael Tuexen DO(sctps_wu_sacks_sent);
2531eaa5682SMichael Tuexen DO(sctps_sends_with_flags);
2541eaa5682SMichael Tuexen DO(sctps_sends_with_unord);
2551eaa5682SMichael Tuexen DO(sctps_sends_with_eof);
2561eaa5682SMichael Tuexen DO(sctps_sends_with_abort);
2571eaa5682SMichael Tuexen DO(sctps_protocol_drain_calls);
2581eaa5682SMichael Tuexen DO(sctps_protocol_drains_done);
2591eaa5682SMichael Tuexen DO(sctps_read_peeks);
2601eaa5682SMichael Tuexen DO(sctps_cached_chk);
2611eaa5682SMichael Tuexen DO(sctps_cached_strmoq);
2621eaa5682SMichael Tuexen DO(sctps_left_abandon);
2631eaa5682SMichael Tuexen DO(sctps_send_burst_avoid);
2641eaa5682SMichael Tuexen DO(sctps_send_cwnd_avoid);
2651eaa5682SMichael Tuexen DO(sctps_fwdtsn_map_over);
2661eaa5682SMichael Tuexen DO(sctps_queue_upd_ecne);
2671eaa5682SMichael Tuexen #undef DO
2681eaa5682SMichael Tuexen }
2691eaa5682SMichael Tuexen
2701eaa5682SMichael Tuexen void
showsctp(void)2711eaa5682SMichael Tuexen showsctp(void)
2721eaa5682SMichael Tuexen {
2731eaa5682SMichael Tuexen struct sctpstat stats;
2741eaa5682SMichael Tuexen
2751eaa5682SMichael Tuexen memset(&stats, 0, sizeof stats);
2761eaa5682SMichael Tuexen domode(&stats);
2771eaa5682SMichael Tuexen
2781eaa5682SMichael Tuexen #define DO(stat, row, col) \
279*35e941ceSBaptiste Daroussin mvwprintw(wnd, row, col, "%12u", stats.stat)
2801eaa5682SMichael Tuexen #define L(row, stat) DO(stat, row, 0)
2811eaa5682SMichael Tuexen #define R(row, stat) DO(stat, row, 38)
2821eaa5682SMichael Tuexen L(1, sctps_activeestab); R(1, sctps_outpackets);
2831eaa5682SMichael Tuexen L(2, sctps_passiveestab); R(2, sctps_inpackets);
2842caa5afcSMichael Tuexen L(3, sctps_restartestab); R(3, sctps_outoftheblue);
2852caa5afcSMichael Tuexen L(4, sctps_shutdown); R(4, sctps_badvtag);
2862caa5afcSMichael Tuexen L(5, sctps_aborted); R(5, sctps_checksumerrors);
2871eaa5682SMichael Tuexen
2881eaa5682SMichael Tuexen
2892caa5afcSMichael Tuexen L(8, sctps_timoinit); R(8, sctps_outcontrolchunks);
2902caa5afcSMichael Tuexen L(9, sctps_timocookie); R(9, sctps_senddata);
2912caa5afcSMichael Tuexen L(10, sctps_timodata); R(10, sctps_outorderchunks);
2922caa5afcSMichael Tuexen L(11, sctps_timosack); R(11, sctps_outunorderchunks);
2932caa5afcSMichael Tuexen L(12, sctps_timoshutdown); R(12, sctps_incontrolchunks);
2942caa5afcSMichael Tuexen L(13, sctps_timoshutdownack); R(13, sctps_recvdata);
2952caa5afcSMichael Tuexen L(14, sctps_timoshutdownguard); R(14, sctps_inorderchunks);
2962caa5afcSMichael Tuexen L(15, sctps_timoheartbeat); R(15, sctps_inunorderchunks);
2972caa5afcSMichael Tuexen L(16, sctps_timopathmtu);
2982caa5afcSMichael Tuexen L(17, sctps_timoautoclose);
2992caa5afcSMichael Tuexen L(18, sctps_timoasconf); R(18, sctps_fragusrmsgs);
3002caa5afcSMichael Tuexen L(19, sctps_timostrmrst); R(19, sctps_reasmusrmsgs);
3011eaa5682SMichael Tuexen #undef DO
3021eaa5682SMichael Tuexen #undef L
3031eaa5682SMichael Tuexen #undef R
3041eaa5682SMichael Tuexen }
3051eaa5682SMichael Tuexen
3061eaa5682SMichael Tuexen int
initsctp(void)3071eaa5682SMichael Tuexen initsctp(void)
3081eaa5682SMichael Tuexen {
3091eaa5682SMichael Tuexen size_t len;
3101eaa5682SMichael Tuexen const char *name = "net.inet.sctp.stats";
3111eaa5682SMichael Tuexen
3121eaa5682SMichael Tuexen len = 0;
3131eaa5682SMichael Tuexen if (sysctlbyname(name, NULL, &len, NULL, 0) < 0) {
3141eaa5682SMichael Tuexen error("sysctl getting sctpstat size failed");
3151eaa5682SMichael Tuexen return 0;
3161eaa5682SMichael Tuexen }
3171eaa5682SMichael Tuexen if (len > sizeof curstat) {
3181eaa5682SMichael Tuexen error("sctpstat structure has grown--recompile systat!");
3191eaa5682SMichael Tuexen return 0;
3201eaa5682SMichael Tuexen }
3211eaa5682SMichael Tuexen if (sysctlbyname(name, &initstat, &len, NULL, 0) < 0) {
3221eaa5682SMichael Tuexen error("sysctl getting sctpstat failed");
3231eaa5682SMichael Tuexen return 0;
3241eaa5682SMichael Tuexen }
3251eaa5682SMichael Tuexen oldstat = initstat;
3261eaa5682SMichael Tuexen return 1;
3271eaa5682SMichael Tuexen }
3281eaa5682SMichael Tuexen
3291eaa5682SMichael Tuexen void
resetsctp(void)3301eaa5682SMichael Tuexen resetsctp(void)
3311eaa5682SMichael Tuexen {
3321eaa5682SMichael Tuexen size_t len;
3331eaa5682SMichael Tuexen const char *name = "net.inet.sctp.stats";
3341eaa5682SMichael Tuexen
3351eaa5682SMichael Tuexen len = sizeof initstat;
3361eaa5682SMichael Tuexen if (sysctlbyname(name, &initstat, &len, NULL, 0) < 0) {
3371eaa5682SMichael Tuexen error("sysctl getting sctpstat failed");
3381eaa5682SMichael Tuexen }
3391eaa5682SMichael Tuexen oldstat = initstat;
3401eaa5682SMichael Tuexen }
3411eaa5682SMichael Tuexen
3421eaa5682SMichael Tuexen void
fetchsctp(void)3431eaa5682SMichael Tuexen fetchsctp(void)
3441eaa5682SMichael Tuexen {
3451eaa5682SMichael Tuexen size_t len;
3461eaa5682SMichael Tuexen const char *name = "net.inet.sctp.stats";
3471eaa5682SMichael Tuexen
3481eaa5682SMichael Tuexen oldstat = curstat;
3491eaa5682SMichael Tuexen len = sizeof curstat;
3501eaa5682SMichael Tuexen if (sysctlbyname(name, &curstat, &len, NULL, 0) < 0) {
3511eaa5682SMichael Tuexen error("sysctl getting sctpstat failed");
3521eaa5682SMichael Tuexen }
3531eaa5682SMichael Tuexen return;
3541eaa5682SMichael Tuexen }
355