From owner-p4-projects@FreeBSD.ORG Mon Jul 27 13:11:04 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 297F41065673; Mon, 27 Jul 2009 13:11:03 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A59B5106566B for ; Mon, 27 Jul 2009 13:11:03 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 932838FC1E for ; Mon, 27 Jul 2009 13:11:03 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6RDB30H081659 for ; Mon, 27 Jul 2009 13:11:03 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6RDB3JN081657 for perforce@freebsd.org; Mon, 27 Jul 2009 13:11:03 GMT (envelope-from pgj@FreeBSD.org) Date: Mon, 27 Jul 2009 13:11:03 GMT Message-Id: <200907271311.n6RDB3JN081657@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 166614 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jul 2009 13:11:05 -0000 http://perforce.freebsd.org/chv.cgi?CH=166614 Change 166614 by pgj@petymeg-current on 2009/07/27 13:10:48 Standardize struct tcpstat and add a general header structure for protocol-dependent statistics to support exporting information. Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/sys/netinet/tcp_input.c#2 edit .. //depot/projects/soc2009/pgj_libstat/src/sys/netinet/tcp_var.h#2 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/tcp_input.c#2 (text+ko) ==== @@ -105,6 +105,10 @@ static const int tcprexmtthresh = 3; #ifdef VIMAGE_GLOBALS +struct stat_header tcpstat_header = { + .sth_version = TCPSTAT_VERSION, + .sth_len = sizeof(struct tcpstat) +}; struct tcpstat tcpstat; int blackhole; int tcp_delack_enabled; @@ -125,6 +129,9 @@ CTLFLAG_RW, tcpstat , tcpstat, "TCP statistics (struct tcpstat, netinet/tcp_var.h)"); +SYSCTL_V_STRUCT(V_NET, vnet_inet, _net_inet_tcp, OID_AUTO, stats_header, + CTLFLAG_RD, tcpstat_header, stat_header, "TCP statistics header"); + int tcp_log_in_vain = 0; SYSCTL_INT(_net_inet_tcp, OID_AUTO, log_in_vain, CTLFLAG_RW, &tcp_log_in_vain, 0, "Log all incoming TCP segments to closed ports"); ==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/tcp_var.h#2 (text+ko) ==== @@ -352,114 +352,123 @@ max((tp)->t_rttmin, (((tp)->t_srtt >> (TCP_RTT_SHIFT - TCP_DELTA_SHIFT)) \ + (tp)->t_rttvar) >> TCP_DELTA_SHIFT) +/* XXX: should be moved to somewhere else. */ +struct stat_header { + const u_int32_t sth_version; + const u_int32_t sth_len; +}; + /* * TCP statistics. * Many of these should be kept per connection, * but that's inconvenient at the moment. */ -struct tcpstat { - u_long tcps_connattempt; /* connections initiated */ - u_long tcps_accepts; /* connections accepted */ - u_long tcps_connects; /* connections established */ - u_long tcps_drops; /* connections dropped */ - u_long tcps_conndrops; /* embryonic connections dropped */ - u_long tcps_minmssdrops; /* average minmss too low drops */ - u_long tcps_closed; /* conn. closed (includes drops) */ - u_long tcps_segstimed; /* segs where we tried to get rtt */ - u_long tcps_rttupdated; /* times we succeeded */ - u_long tcps_delack; /* delayed acks sent */ - u_long tcps_timeoutdrop; /* conn. dropped in rxmt timeout */ - u_long tcps_rexmttimeo; /* retransmit timeouts */ - u_long tcps_persisttimeo; /* persist timeouts */ - u_long tcps_keeptimeo; /* keepalive timeouts */ - u_long tcps_keepprobe; /* keepalive probes sent */ - u_long tcps_keepdrops; /* connections dropped in keepalive */ + +#define TCPSTAT_VERSION 0x00000001 + +struct tcpstat { + u_int64_t tcps_connattempt; /* connections initiated */ + u_int64_t tcps_accepts; /* connections accepted */ + u_int64_t tcps_connects; /* connections established */ + u_int64_t tcps_drops; /* connections dropped */ + u_int64_t tcps_conndrops; /* embryonic connections dropped */ + u_int64_t tcps_minmssdrops; /* average minmss too low drops */ + u_int64_t tcps_closed; /* conn. closed (includes drops) */ + u_int64_t tcps_segstimed; /* segs where we tried to get rtt */ + u_int64_t tcps_rttupdated; /* times we succeeded */ + u_int64_t tcps_delack; /* delayed acks sent */ + u_int64_t tcps_timeoutdrop; /* conn. dropped in rxmt timeout */ + u_int64_t tcps_rexmttimeo; /* retransmit timeouts */ + u_int64_t tcps_persisttimeo; /* persist timeouts */ + u_int64_t tcps_keeptimeo; /* keepalive timeouts */ + u_int64_t tcps_keepprobe; /* keepalive probes sent */ + u_int64_t tcps_keepdrops; /* connections dropped in keepalive */ - u_long tcps_sndtotal; /* total packets sent */ - u_long tcps_sndpack; /* data packets sent */ - u_long tcps_sndbyte; /* data bytes sent */ - u_long tcps_sndrexmitpack; /* data packets retransmitted */ - u_long tcps_sndrexmitbyte; /* data bytes retransmitted */ - u_long tcps_sndrexmitbad; /* unnecessary packet retransmissions */ - u_long tcps_sndacks; /* ack-only packets sent */ - u_long tcps_sndprobe; /* window probes sent */ - u_long tcps_sndurg; /* packets sent with URG only */ - u_long tcps_sndwinup; /* window update-only packets sent */ - u_long tcps_sndctrl; /* control (SYN|FIN|RST) packets sent */ + u_int64_t tcps_sndtotal; /* total packets sent */ + u_int64_t tcps_sndpack; /* data packets sent */ + u_int64_t tcps_sndbyte; /* data bytes sent */ + u_int64_t tcps_sndrexmitpack; /* data packets retransmitted */ + u_int64_t tcps_sndrexmitbyte; /* data bytes retransmitted */ + u_int64_t tcps_sndrexmitbad; /* unnecessary packet retransmissions */ + u_int64_t tcps_sndacks; /* ack-only packets sent */ + u_int64_t tcps_sndprobe; /* window probes sent */ + u_int64_t tcps_sndurg; /* packets sent with URG only */ + u_int64_t tcps_sndwinup; /* window update-only packets sent */ + u_int64_t tcps_sndctrl; /* control (SYN|FIN|RST) packets sent */ - u_long tcps_rcvtotal; /* total packets received */ - u_long tcps_rcvpack; /* packets received in sequence */ - u_long tcps_rcvbyte; /* bytes received in sequence */ - u_long tcps_rcvbadsum; /* packets received with ccksum errs */ - u_long tcps_rcvbadoff; /* packets received with bad offset */ - u_long tcps_rcvmemdrop; /* packets dropped for lack of memory */ - u_long tcps_rcvshort; /* packets received too short */ - u_long tcps_rcvduppack; /* duplicate-only packets received */ - u_long tcps_rcvdupbyte; /* duplicate-only bytes received */ - u_long tcps_rcvpartduppack; /* packets with some duplicate data */ - u_long tcps_rcvpartdupbyte; /* dup. bytes in part-dup. packets */ - u_long tcps_rcvoopack; /* out-of-order packets received */ - u_long tcps_rcvoobyte; /* out-of-order bytes received */ - u_long tcps_rcvpackafterwin; /* packets with data after window */ - u_long tcps_rcvbyteafterwin; /* bytes rcvd after window */ - u_long tcps_rcvafterclose; /* packets rcvd after "close" */ - u_long tcps_rcvwinprobe; /* rcvd window probe packets */ - u_long tcps_rcvdupack; /* rcvd duplicate acks */ - u_long tcps_rcvacktoomuch; /* rcvd acks for unsent data */ - u_long tcps_rcvackpack; /* rcvd ack packets */ - u_long tcps_rcvackbyte; /* bytes acked by rcvd acks */ - u_long tcps_rcvwinupd; /* rcvd window update packets */ - u_long tcps_pawsdrop; /* segments dropped due to PAWS */ - u_long tcps_predack; /* times hdr predict ok for acks */ - u_long tcps_preddat; /* times hdr predict ok for data pkts */ - u_long tcps_pcbcachemiss; - u_long tcps_cachedrtt; /* times cached RTT in route updated */ - u_long tcps_cachedrttvar; /* times cached rttvar updated */ - u_long tcps_cachedssthresh; /* times cached ssthresh updated */ - u_long tcps_usedrtt; /* times RTT initialized from route */ - u_long tcps_usedrttvar; /* times RTTVAR initialized from rt */ - u_long tcps_usedssthresh; /* times ssthresh initialized from rt*/ - u_long tcps_persistdrop; /* timeout in persist state */ - u_long tcps_badsyn; /* bogus SYN, e.g. premature ACK */ - u_long tcps_mturesent; /* resends due to MTU discovery */ - u_long tcps_listendrop; /* listen queue overflows */ - u_long tcps_badrst; /* ignored RSTs in the window */ + u_int64_t tcps_rcvtotal; /* total packets received */ + u_int64_t tcps_rcvpack; /* packets received in sequence */ + u_int64_t tcps_rcvbyte; /* bytes received in sequence */ + u_int64_t tcps_rcvbadsum; /* packets received with ccksum errs */ + u_int64_t tcps_rcvbadoff; /* packets received with bad offset */ + u_int64_t tcps_rcvmemdrop; /* packets dropped for lack of memory */ + u_int64_t tcps_rcvshort; /* packets received too short */ + u_int64_t tcps_rcvduppack; /* duplicate-only packets received */ + u_int64_t tcps_rcvdupbyte; /* duplicate-only bytes received */ + u_int64_t tcps_rcvpartduppack; /* packets with some duplicate data */ + u_int64_t tcps_rcvpartdupbyte; /* dup. bytes in part-dup. packets */ + u_int64_t tcps_rcvoopack; /* out-of-order packets received */ + u_int64_t tcps_rcvoobyte; /* out-of-order bytes received */ + u_int64_t tcps_rcvpackafterwin; /* packets with data after window */ + u_int64_t tcps_rcvbyteafterwin; /* bytes rcvd after window */ + u_int64_t tcps_rcvafterclose; /* packets rcvd after "close" */ + u_int64_t tcps_rcvwinprobe; /* rcvd window probe packets */ + u_int64_t tcps_rcvdupack; /* rcvd duplicate acks */ + u_int64_t tcps_rcvacktoomuch; /* rcvd acks for unsent data */ + u_int64_t tcps_rcvackpack; /* rcvd ack packets */ + u_int64_t tcps_rcvackbyte; /* bytes acked by rcvd acks */ + u_int64_t tcps_rcvwinupd; /* rcvd window update packets */ + u_int64_t tcps_pawsdrop; /* segments dropped due to PAWS */ + u_int64_t tcps_predack; /* times hdr predict ok for acks */ + u_int64_t tcps_preddat; /* times hdr predict ok for data pkts */ + u_int64_t tcps_pcbcachemiss; + u_int64_t tcps_cachedrtt; /* times cached RTT in route updated */ + u_int64_t tcps_cachedrttvar; /* times cached rttvar updated */ + u_int64_t tcps_cachedssthresh; /* times cached ssthresh updated */ + u_int64_t tcps_usedrtt; /* times RTT initialized from route */ + u_int64_t tcps_usedrttvar; /* times RTTVAR initialized from rt */ + u_int64_t tcps_usedssthresh; /* times ssthresh initialized from rt*/ + u_int64_t tcps_persistdrop; /* timeout in persist state */ + u_int64_t tcps_badsyn; /* bogus SYN, e.g. premature ACK */ + u_int64_t tcps_mturesent; /* resends due to MTU discovery */ + u_int64_t tcps_listendrop; /* listen queue overflows */ + u_int64_t tcps_badrst; /* ignored RSTs in the window */ - u_long tcps_sc_added; /* entry added to syncache */ - u_long tcps_sc_retransmitted; /* syncache entry was retransmitted */ - u_long tcps_sc_dupsyn; /* duplicate SYN packet */ - u_long tcps_sc_dropped; /* could not reply to packet */ - u_long tcps_sc_completed; /* successful extraction of entry */ - u_long tcps_sc_bucketoverflow; /* syncache per-bucket limit hit */ - u_long tcps_sc_cacheoverflow; /* syncache cache limit hit */ - u_long tcps_sc_reset; /* RST removed entry from syncache */ - u_long tcps_sc_stale; /* timed out or listen socket gone */ - u_long tcps_sc_aborted; /* syncache entry aborted */ - u_long tcps_sc_badack; /* removed due to bad ACK */ - u_long tcps_sc_unreach; /* ICMP unreachable received */ - u_long tcps_sc_zonefail; /* zalloc() failed */ - u_long tcps_sc_sendcookie; /* SYN cookie sent */ - u_long tcps_sc_recvcookie; /* SYN cookie received */ + u_int64_t tcps_sc_added; /* entry added to syncache */ + u_int64_t tcps_sc_retransmitted; /* syncache entry was retransmitted */ + u_int64_t tcps_sc_dupsyn; /* duplicate SYN packet */ + u_int64_t tcps_sc_dropped; /* could not reply to packet */ + u_int64_t tcps_sc_completed; /* successful extraction of entry */ + u_int64_t tcps_sc_bucketoverflow; /* syncache per-bucket limit hit */ + u_int64_t tcps_sc_cacheoverflow; /* syncache cache limit hit */ + u_int64_t tcps_sc_reset; /* RST removed entry from syncache */ + u_int64_t tcps_sc_stale; /* timed out or listen socket gone */ + u_int64_t tcps_sc_aborted; /* syncache entry aborted */ + u_int64_t tcps_sc_badack; /* removed due to bad ACK */ + u_int64_t tcps_sc_unreach; /* ICMP unreachable received */ + u_int64_t tcps_sc_zonefail; /* zalloc() failed */ + u_int64_t tcps_sc_sendcookie; /* SYN cookie sent */ + u_int64_t tcps_sc_recvcookie; /* SYN cookie received */ - u_long tcps_hc_added; /* entry added to hostcache */ - u_long tcps_hc_bucketoverflow; /* hostcache per bucket limit hit */ + u_int64_t tcps_hc_added; /* entry added to hostcache */ + u_int64_t tcps_hc_bucketoverflow; /* hostcache per bucket limit hit */ - u_long tcps_finwait2_drops; /* Drop FIN_WAIT_2 connection after time limit */ + u_int64_t tcps_finwait2_drops; /* Drop FIN_WAIT_2 connection after time limit */ /* SACK related stats */ - u_long tcps_sack_recovery_episode; /* SACK recovery episodes */ - u_long tcps_sack_rexmits; /* SACK rexmit segments */ - u_long tcps_sack_rexmit_bytes; /* SACK rexmit bytes */ - u_long tcps_sack_rcv_blocks; /* SACK blocks (options) received */ - u_long tcps_sack_send_blocks; /* SACK blocks (options) sent */ - u_long tcps_sack_sboverflow; /* times scoreboard overflowed */ + u_int64_t tcps_sack_recovery_episode; /* SACK recovery episodes */ + u_int64_t tcps_sack_rexmits; /* SACK rexmit segments */ + u_int64_t tcps_sack_rexmit_bytes; /* SACK rexmit bytes */ + u_int64_t tcps_sack_rcv_blocks; /* SACK blocks (options) received */ + u_int64_t tcps_sack_send_blocks; /* SACK blocks (options) sent */ + u_int64_t tcps_sack_sboverflow; /* times scoreboard overflowed */ /* ECN related stats */ - u_long tcps_ecn_ce; /* ECN Congestion Experienced */ - u_long tcps_ecn_ect0; /* ECN Capable Transport */ - u_long tcps_ecn_ect1; /* ECN Capable Transport */ - u_long tcps_ecn_shs; /* ECN successful handshakes */ - u_long tcps_ecn_rcwnd; /* # times ECN reduced the cwnd */ + u_int64_t tcps_ecn_ce; /* ECN Congestion Experienced */ + u_int64_t tcps_ecn_ect0; /* ECN Capable Transport */ + u_int64_t tcps_ecn_ect1; /* ECN Capable Transport */ + u_int64_t tcps_ecn_shs; /* ECN successful handshakes */ + u_int64_t tcps_ecn_rcwnd; /* # times ECN reduced the cwnd */ }; #ifdef _KERNEL