Mercurial > illumos > illumos-gate
changeset 10751:ac32bd227956
6886158 Stats exported in CR 6808307 can be erroneously reset by kstat and netstat
author | George Shepherd <George.Shepherd@Sun.COM> |
---|---|
date | Fri, 09 Oct 2009 11:41:32 -0700 |
parents | 9168799eeedc |
children | 75a8eec7b28a |
files | usr/src/uts/common/inet/sctp/sctp.c usr/src/uts/common/inet/sctp/sctp_impl.h usr/src/uts/common/inet/sctp/sctp_opt_data.c usr/src/uts/common/inet/sctp/sctp_snmp.c |
diffstat | 4 files changed, 69 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/inet/sctp/sctp.c Fri Oct 09 10:30:00 2009 -0700 +++ b/usr/src/uts/common/inet/sctp/sctp.c Fri Oct 09 11:41:32 2009 -0700 @@ -787,6 +787,18 @@ sctp->sctp_iudchunks = 0; sctp->sctp_fragdmsgs = 0; sctp->sctp_reassmsgs = 0; + sctp->sctp_outseqtsns = 0; + sctp->sctp_osacks = 0; + sctp->sctp_isacks = 0; + sctp->sctp_idupchunks = 0; + sctp->sctp_gapcnt = 0; + sctp->sctp_cum_obchunks = 0; + sctp->sctp_cum_odchunks = 0; + sctp->sctp_cum_oudchunks = 0; + sctp->sctp_cum_rxtchunks = 0; + sctp->sctp_cum_ibchunks = 0; + sctp->sctp_cum_idchunks = 0; + sctp->sctp_cum_iudchunks = 0; sctp->sctp_autoclose = 0; sctp->sctp_tx_adaptation_code = 0;
--- a/usr/src/uts/common/inet/sctp/sctp_impl.h Fri Oct 09 10:30:00 2009 -0700 +++ b/usr/src/uts/common/inet/sctp/sctp_impl.h Fri Oct 09 11:41:32 2009 -0700 @@ -693,7 +693,7 @@ uint32_t sctp_rtt_tsn; int64_t sctp_out_time; - /* Stats */ + /* Stats can be reset by snmp users kstat, netstat and snmp agents */ uint64_t sctp_opkts; /* sent pkts */ uint64_t sctp_obchunks; /* sent control chunks */ uint64_t sctp_odchunks; /* sent ordered data chunks */ @@ -959,6 +959,17 @@ uint64_t sctp_isacks; /* total sacks received */ uint64_t sctp_idupchunks; /* rx dups, ord or unord */ uint64_t sctp_gapcnt; /* total gap acks rx */ + /* + * Add the current data from the counters which are reset by snmp + * to these cumulative counters to use in per endpoint statistics. + */ + uint64_t sctp_cum_obchunks; /* sent control chunks */ + uint64_t sctp_cum_odchunks; /* sent ordered data chunks */ + uint64_t sctp_cum_oudchunks; /* sent unord data chunks */ + uint64_t sctp_cum_rxtchunks; /* retransmitted chunks */ + uint64_t sctp_cum_ibchunks; /* recv control chunks */ + uint64_t sctp_cum_idchunks; /* recv ordered data chunks */ + uint64_t sctp_cum_iudchunks; /* recv unord data chunks */ /* * When non-zero, this is the maximum observed RTO since assoc stats
--- a/usr/src/uts/common/inet/sctp/sctp_opt_data.c Fri Oct 09 10:30:00 2009 -0700 +++ b/usr/src/uts/common/inet/sctp/sctp_opt_data.c Fri Oct 09 11:41:32 2009 -0700 @@ -897,19 +897,29 @@ /* * Copy the current stats to the stats struct. + * For stats which can be reset by snmp users + * add the cumulative and current stats for + * the raw totals to output to the user. */ - sas->sas_rtxchunks = sctp->sctp_rxtchunks; sas->sas_gapcnt = sctp->sctp_gapcnt; sas->sas_outseqtsns = sctp->sctp_outseqtsns; sas->sas_osacks = sctp->sctp_osacks; sas->sas_isacks = sctp->sctp_isacks; - sas->sas_octrlchunks = sctp->sctp_obchunks; - sas->sas_ictrlchunks = sctp->sctp_ibchunks; - sas->sas_oodchunks = sctp->sctp_odchunks; - sas->sas_iodchunks = sctp->sctp_idchunks; - sas->sas_ouodchunks = sctp->sctp_oudchunks; - sas->sas_iuodchunks = sctp->sctp_iudchunks; sas->sas_idupchunks = sctp->sctp_idupchunks; + sas->sas_rtxchunks = sctp->sctp_rxtchunks + + sctp->sctp_cum_rxtchunks; + sas->sas_octrlchunks = sctp->sctp_obchunks + + sctp->sctp_cum_obchunks; + sas->sas_ictrlchunks = sctp->sctp_ibchunks + + sctp->sctp_cum_ibchunks; + sas->sas_oodchunks = sctp->sctp_odchunks + + sctp->sctp_cum_odchunks; + sas->sas_iodchunks = sctp->sctp_idchunks + + sctp->sctp_cum_idchunks; + sas->sas_ouodchunks = sctp->sctp_oudchunks + + sctp->sctp_cum_oudchunks; + sas->sas_iuodchunks = sctp->sctp_iudchunks + + sctp->sctp_cum_iudchunks; /* * Copy out the maximum observed RTO since the
--- a/usr/src/uts/common/inet/sctp/sctp_snmp.c Fri Oct 09 10:30:00 2009 -0700 +++ b/usr/src/uts/common/inet/sctp/sctp_snmp.c Fri Oct 09 11:41:32 2009 -0700 @@ -110,24 +110,32 @@ if (sctp->sctp_obchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpOutCtrlChunks, sctp->sctp_obchunks); + UPDATE_LOCAL(sctp->sctp_cum_obchunks, + sctp->sctp_obchunks); sctp->sctp_obchunks = 0; } if (sctp->sctp_odchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpOutOrderChunks, sctp->sctp_odchunks); + UPDATE_LOCAL(sctp->sctp_cum_odchunks, + sctp->sctp_odchunks); sctp->sctp_odchunks = 0; } if (sctp->sctp_oudchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpOutUnorderChunks, sctp->sctp_oudchunks); + UPDATE_LOCAL(sctp->sctp_cum_oudchunks, + sctp->sctp_oudchunks); sctp->sctp_oudchunks = 0; } if (sctp->sctp_rxtchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpRetransChunks, sctp->sctp_rxtchunks); + UPDATE_LOCAL(sctp->sctp_cum_rxtchunks, + sctp->sctp_rxtchunks); sctp->sctp_rxtchunks = 0; } @@ -140,18 +148,24 @@ if (sctp->sctp_ibchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpInCtrlChunks, sctp->sctp_ibchunks); + UPDATE_LOCAL(sctp->sctp_cum_ibchunks, + sctp->sctp_ibchunks); sctp->sctp_ibchunks = 0; } if (sctp->sctp_idchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpInOrderChunks, sctp->sctp_idchunks); + UPDATE_LOCAL(sctp->sctp_cum_idchunks, + sctp->sctp_idchunks); sctp->sctp_idchunks = 0; } if (sctp->sctp_iudchunks) { UPDATE_MIB(&sctps->sctps_mib, sctpInUnorderChunks, sctp->sctp_iudchunks); + UPDATE_LOCAL(sctp->sctp_cum_iudchunks, + sctp->sctp_iudchunks); sctp->sctp_iudchunks = 0; } @@ -483,27 +497,41 @@ sctp->sctp_opkts = 0; UPDATE_MIB(&sctps->sctps_mib, sctpOutCtrlChunks, sctp->sctp_obchunks); + UPDATE_LOCAL(sctp->sctp_cum_obchunks, + sctp->sctp_obchunks); sctp->sctp_obchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpOutOrderChunks, sctp->sctp_odchunks); + UPDATE_LOCAL(sctp->sctp_cum_odchunks, + sctp->sctp_odchunks); sctp->sctp_odchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpOutUnorderChunks, sctp->sctp_oudchunks); + UPDATE_LOCAL(sctp->sctp_cum_oudchunks, + sctp->sctp_oudchunks); sctp->sctp_oudchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpRetransChunks, sctp->sctp_rxtchunks); + UPDATE_LOCAL(sctp->sctp_cum_rxtchunks, + sctp->sctp_rxtchunks); sctp->sctp_rxtchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpInSCTPPkts, sctp->sctp_ipkts); sctp->sctp_ipkts = 0; UPDATE_MIB(&sctps->sctps_mib, sctpInCtrlChunks, sctp->sctp_ibchunks); + UPDATE_LOCAL(sctp->sctp_cum_ibchunks, + sctp->sctp_ibchunks); sctp->sctp_ibchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpInOrderChunks, sctp->sctp_idchunks); + UPDATE_LOCAL(sctp->sctp_cum_idchunks, + sctp->sctp_idchunks); sctp->sctp_idchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpInUnorderChunks, sctp->sctp_iudchunks); + UPDATE_LOCAL(sctp->sctp_cum_iudchunks, + sctp->sctp_iudchunks); sctp->sctp_iudchunks = 0; UPDATE_MIB(&sctps->sctps_mib, sctpFragUsrMsgs, sctp->sctp_fragdmsgs);