Add an SCTP socket option to retrieve the number of timeouts

of an association.

MFC after: 3 days.
This commit is contained in:
Michael Tuexen 2010-11-16 22:16:38 +00:00
parent b751664f7f
commit 6a67588bbb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=215410
3 changed files with 35 additions and 0 deletions

View File

@ -123,6 +123,7 @@ struct sctp_paramhdr {
#define SCTP_LOCAL_AUTH_CHUNKS 0x00000103
#define SCTP_GET_ASSOC_NUMBER 0x00000104 /* ro */
#define SCTP_GET_ASSOC_ID_LIST 0x00000105 /* ro */
#define SCTP_TIMEOUTS 0x00000106
/*
* user socket options: BSD implementation specific

View File

@ -563,6 +563,17 @@ struct sctp_sack_info {
uint32_t sack_freq;
};
struct sctp_timeouts {
sctp_assoc_t stimo_assoc_id;
uint32_t stimo_init;
uint32_t stimo_data;
uint32_t stimo_sack;
uint32_t stimo_shutdown;
uint32_t stimo_heartbeat;
uint32_t stimo_cookie;
uint32_t stimo_shutdownack;
};
struct sctp_cwnd_args {
struct sctp_nets *net; /* network to *//* FIXME: LP64 issue */
uint32_t cwnd_new_value;/* cwnd in k */

View File

@ -2441,6 +2441,29 @@ sctp_getopt(struct socket *so, int optname, void *optval, size_t *optsize,
*optsize = sizeof(*srto);
}
break;
case SCTP_TIMEOUTS:
{
struct sctp_timeouts *stimo;
SCTP_CHECK_AND_CAST(stimo, optval, struct sctp_timeouts, *optsize);
SCTP_FIND_STCB(inp, stcb, stimo->stimo_assoc_id);
if (stcb) {
stimo->stimo_init = stcb->asoc.timoinit;
stimo->stimo_data = stcb->asoc.timodata;
stimo->stimo_sack = stcb->asoc.timosack;
stimo->stimo_shutdown = stcb->asoc.timoshutdown;
stimo->stimo_heartbeat = stcb->asoc.timoheartbeat;
stimo->stimo_cookie = stcb->asoc.timocookie;
stimo->stimo_shutdownack = stcb->asoc.timoshutdownack;
SCTP_TCB_UNLOCK(stcb);
} else {
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, error);
error = EINVAL;
}
*optsize = sizeof(*stimo);
}
break;
case SCTP_ASSOCINFO:
{
struct sctp_assocparams *sasoc;