diff options
author | tuexen <tuexen@FreeBSD.org> | 2012-05-06 13:09:13 +0000 |
---|---|---|
committer | tuexen <tuexen@FreeBSD.org> | 2012-05-06 13:09:13 +0000 |
commit | b5cb1ff1a3eca6a245b6dcff30ebdd89c008f23a (patch) | |
tree | b3b3c55a69aad5cfe7d8ec0c9e8b0b6c8f8bd690 /sys/netinet/sctputil.c | |
parent | 6710f450f7a9e9efe9980ca61ce3d87b66627ea4 (diff) | |
download | FreeBSD-src-b5cb1ff1a3eca6a245b6dcff30ebdd89c008f23a.zip FreeBSD-src-b5cb1ff1a3eca6a245b6dcff30ebdd89c008f23a.tar.gz |
Add support for the sac_info field in struct sctp_assoc_change
as required by RFC 6458.
MFC after: 3 days
Diffstat (limited to 'sys/netinet/sctputil.c')
-rw-r--r-- | sys/netinet/sctputil.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 118b7e6..0587b37 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -2602,6 +2602,7 @@ sctp_notify_assoc_change(uint32_t event, struct sctp_tcb *stcb, struct mbuf *m_notify; struct sctp_assoc_change *sac; struct sctp_queued_to_read *control; + unsigned int i; #if defined (__APPLE__) || defined(SCTP_SO_LOCK_TESTING) struct socket *so; @@ -2666,7 +2667,22 @@ sctp_notify_assoc_change(uint32_t event, struct sctp_tcb *stcb, sac->sac_outbound_streams = stcb->asoc.streamoutcnt; sac->sac_inbound_streams = stcb->asoc.streamincnt; sac->sac_assoc_id = sctp_get_associd(stcb); - SCTP_BUF_LEN(m_notify) = sizeof(struct sctp_assoc_change); + i = 0; + if (stcb->asoc.peer_supports_prsctp) { + sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_PR; + } + if (stcb->asoc.peer_supports_auth) { + sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_AUTH; + } + if (stcb->asoc.peer_supports_asconf) { + sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_ASCONF; + } + sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_MULTIBUF; + if (stcb->asoc.peer_supports_strreset) { + sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_RE_CONFIG; + } + sac->sac_length += i; + SCTP_BUF_LEN(m_notify) = sac->sac_length; SCTP_BUF_NEXT(m_notify) = NULL; control = sctp_build_readq_entry(stcb, stcb->asoc.primary_destination, 0, 0, stcb->asoc.context, 0, 0, 0, |