sctp: Add support to per-association statistics via a new SCTP_GET_ASSOC_STATS call
The current SCTP stack is lacking a mechanism to have per association statistics. This is an implementation modeled after OpenSolaris' SCTP_GET_ASSOC_STATS. Userspace part will follow on lksctp if/when there is a general ACK on this. V4: - Move ipackets++ before q->immediate.func() for consistency reasons - Move sctp_max_rto() at the end of sctp_transport_update_rto() to avoid returning bogus RTO values - return asoc->rto_min when max_obs_rto value has not changed V3: - Increase ictrlchunks in sctp_assoc_bh_rcv() as well - Move ipackets++ to sctp_inq_push() - return 0 when no rto updates took place since the last call V2: - Implement partial retrieval of stat struct to cope for future expansion - Kill the rtxpackets counter as it cannot be precise anyway - Rename outseqtsns to outofseqtsns to make it clearer that these are out of sequence unexpected TSNs - Move asoc->ipackets++ under a lock to avoid potential miscounts - Fold asoc->opackets++ into the already existing asoc check - Kill unneeded (q->asoc) test when increasing rtxchunks - Do not count octrlchunks if sending failed (SCTP_XMIT_OK != 0) - Don't count SHUTDOWNs as SACKs - Move SCTP_GET_ASSOC_STATS to the private space API - Adjust the len check in sctp_getsockopt_assoc_stats() to allow for future struct growth - Move association statistics in their own struct - Update idupchunks when we send a SACK with dup TSNs - return min_rto in max_rto when RTO has not changed. Also return the transport when max_rto last changed. Signed-off: Michele Baldessari <michele@acksyn.org> Acked-by: Vlad Yasevich <vyasevich@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
96070ae4d0
commit
196d675934
@@ -107,6 +107,7 @@ typedef __s32 sctp_assoc_t;
|
||||
#define SCTP_GET_LOCAL_ADDRS 109 /* Get all local address. */
|
||||
#define SCTP_SOCKOPT_CONNECTX 110 /* CONNECTX requests. */
|
||||
#define SCTP_SOCKOPT_CONNECTX3 111 /* CONNECTX requests (updated) */
|
||||
#define SCTP_GET_ASSOC_STATS 112 /* Read only */
|
||||
|
||||
/*
|
||||
* 5.2.1 SCTP Initiation Structure (SCTP_INIT)
|
||||
@@ -719,6 +720,32 @@ struct sctp_getaddrs {
|
||||
__u8 addrs[0]; /*output, variable size*/
|
||||
};
|
||||
|
||||
/* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
|
||||
* association stats. All stats are counts except sas_maxrto and
|
||||
* sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
|
||||
* the last call. Will return 0 when RTO was not update since last call
|
||||
*/
|
||||
struct sctp_assoc_stats {
|
||||
sctp_assoc_t sas_assoc_id; /* Input */
|
||||
/* Transport of observed max RTO */
|
||||
struct sockaddr_storage sas_obs_rto_ipaddr;
|
||||
__u64 sas_maxrto; /* Maximum Observed RTO for period */
|
||||
__u64 sas_isacks; /* SACKs received */
|
||||
__u64 sas_osacks; /* SACKs sent */
|
||||
__u64 sas_opackets; /* Packets sent */
|
||||
__u64 sas_ipackets; /* Packets received */
|
||||
__u64 sas_rtxchunks; /* Retransmitted Chunks */
|
||||
__u64 sas_outofseqtsns;/* TSN received > next expected */
|
||||
__u64 sas_idupchunks; /* Dups received (ordered+unordered) */
|
||||
__u64 sas_gapcnt; /* Gap Acknowledgements Received */
|
||||
__u64 sas_ouodchunks; /* Unordered data chunks sent */
|
||||
__u64 sas_iuodchunks; /* Unordered data chunks received */
|
||||
__u64 sas_oodchunks; /* Ordered data chunks sent */
|
||||
__u64 sas_iodchunks; /* Ordered data chunks received */
|
||||
__u64 sas_octrlchunks; /* Control chunks sent */
|
||||
__u64 sas_ictrlchunks; /* Control chunks received */
|
||||
};
|
||||
|
||||
/* These are bit fields for msghdr->msg_flags. See section 5.1. */
|
||||
/* On user space Linux, these live in <bits/socket.h> as an enum. */
|
||||
enum sctp_msg_flags {
|
||||
|
Reference in New Issue
Block a user