From owner-svn-src-stable@FreeBSD.ORG  Wed May  9 14:25:15 2012
Return-Path: <owner-svn-src-stable@FreeBSD.ORG>
Delivered-To: svn-src-stable@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id CDAC51065670;
	Wed,  9 May 2012 14:25:15 +0000 (UTC)
	(envelope-from tuexen@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 9E6B18FC17;
	Wed,  9 May 2012 14:25:15 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q49EPFkh087269;
	Wed, 9 May 2012 14:25:15 GMT (envelope-from tuexen@svn.freebsd.org)
Received: (from tuexen@localhost)
	by svn.freebsd.org (8.14.4/8.14.4/Submit) id q49EPF7c087266;
	Wed, 9 May 2012 14:25:15 GMT (envelope-from tuexen@svn.freebsd.org)
Message-Id: <201205091425.q49EPF7c087266@svn.freebsd.org>
From: Michael Tuexen <tuexen@FreeBSD.org>
Date: Wed, 9 May 2012 14:25:15 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-all@freebsd.org,
	svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
X-SVN-Group: stable-9
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r235175 - stable/9/sys/netinet
X-BeenThere: svn-src-stable@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: SVN commit messages for all the -stable branches of the src tree
	<svn-src-stable.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-stable>, 
	<mailto:svn-src-stable-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-stable>
List-Post: <mailto:svn-src-stable@freebsd.org>
List-Help: <mailto:svn-src-stable-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-stable>,
	<mailto:svn-src-stable-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 09 May 2012 14:25:15 -0000

Author: tuexen
Date: Wed May  9 14:25:15 2012
New Revision: 235175
URL: http://svn.freebsd.org/changeset/base/235175

Log:
  MFC r235081:
  Add support for the sac_info field in struct sctp_assoc_change
  as required by RFC 6458.

Modified:
  stable/9/sys/netinet/sctp_uio.h
  stable/9/sys/netinet/sctputil.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/netinet/sctp_uio.h
==============================================================================
--- stable/9/sys/netinet/sctp_uio.h	Wed May  9 14:24:39 2012	(r235174)
+++ stable/9/sys/netinet/sctp_uio.h	Wed May  9 14:25:15 2012	(r235175)
@@ -296,16 +296,23 @@ struct sctp_assoc_change {
 	uint16_t sac_outbound_streams;
 	uint16_t sac_inbound_streams;
 	sctp_assoc_t sac_assoc_id;
+	uint8_t sac_info[];
 };
 
 /* sac_state values */
-#define SCTP_COMM_UP		0x0001
-#define SCTP_COMM_LOST		0x0002
-#define SCTP_RESTART		0x0003
-#define SCTP_SHUTDOWN_COMP	0x0004
-#define SCTP_CANT_STR_ASSOC	0x0005
-
-
+#define SCTP_COMM_UP            0x0001
+#define SCTP_COMM_LOST          0x0002
+#define SCTP_RESTART            0x0003
+#define SCTP_SHUTDOWN_COMP      0x0004
+#define SCTP_CANT_STR_ASSOC     0x0005
+
+/* sac_info values */
+#define SCTP_ASSOC_SUPPORTS_PR        0x01
+#define SCTP_ASSOC_SUPPORTS_AUTH      0x02
+#define SCTP_ASSOC_SUPPORTS_ASCONF    0x03
+#define SCTP_ASSOC_SUPPORTS_MULTIBUF  0x04
+#define SCTP_ASSOC_SUPPORTS_RE_CONFIG 0x05
+#define SCTP_ASSOC_SUPPORTS_MAX       0x05
 /*
  * Address event
  */

Modified: stable/9/sys/netinet/sctputil.c
==============================================================================
--- stable/9/sys/netinet/sctputil.c	Wed May  9 14:24:39 2012	(r235174)
+++ stable/9/sys/netinet/sctputil.c	Wed May  9 14:25:15 2012	(r235175)
@@ -2602,6 +2602,7 @@ sctp_notify_assoc_change(uint32_t event,
 	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,
 	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,