svn commit: r252966 - stable/9/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Sun Jul 7 16:13:56 UTC 2013


Author: tuexen
Date: Sun Jul  7 16:13:54 2013
New Revision: 252966
URL: http://svnweb.freebsd.org/changeset/base/252966

Log:
  MFC r246687:
  Send the adaptation layer indication only if set by the user.

Modified:
  stable/9/sys/netinet/sctp_output.c
  stable/9/sys/netinet/sctp_pcb.c
  stable/9/sys/netinet/sctp_pcb.h
  stable/9/sys/netinet/sctp_usrreq.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/netinet/sctp_output.c
==============================================================================
--- stable/9/sys/netinet/sctp_output.c	Sun Jul  7 16:12:22 2013	(r252965)
+++ stable/9/sys/netinet/sctp_output.c	Sun Jul  7 16:13:54 2013	(r252966)
@@ -4643,19 +4643,19 @@ sctp_send_initiate(struct sctp_inpcb *in
 		chunk_len += parameter_len;
 	}
 	/* Adaptation layer indication parameter */
-	/* XXX: Should we include this always? */
-	if (padding_len > 0) {
-		memset(mtod(m, caddr_t)+chunk_len, 0, padding_len);
-		chunk_len += padding_len;
-		padding_len = 0;
+	if (inp->sctp_ep.adaptation_layer_indicator_provided) {
+		if (padding_len > 0) {
+			memset(mtod(m, caddr_t)+chunk_len, 0, padding_len);
+			chunk_len += padding_len;
+			padding_len = 0;
+		}
+		parameter_len = (uint16_t) sizeof(struct sctp_adaptation_layer_indication);
+		ali = (struct sctp_adaptation_layer_indication *)(mtod(m, caddr_t)+chunk_len);
+		ali->ph.param_type = htons(SCTP_ULP_ADAPTATION);
+		ali->ph.param_length = htons(parameter_len);
+		ali->indication = ntohl(inp->sctp_ep.adaptation_layer_indicator);
+		chunk_len += parameter_len;
 	}
-	parameter_len = (uint16_t) sizeof(struct sctp_adaptation_layer_indication);
-	ali = (struct sctp_adaptation_layer_indication *)(mtod(m, caddr_t)+chunk_len);
-	ali->ph.param_type = htons(SCTP_ULP_ADAPTATION);
-	ali->ph.param_length = htons(parameter_len);
-	ali->indication = ntohl(inp->sctp_ep.adaptation_layer_indicator);
-	chunk_len += parameter_len;
-
 	if (SCTP_BASE_SYSCTL(sctp_inits_include_nat_friendly)) {
 		/* Add NAT friendly parameter. */
 		if (padding_len > 0) {
@@ -5723,12 +5723,16 @@ do_a_abort:
 	    htons(inp->sctp_ep.max_open_streams_intome);
 
 	/* adaptation layer indication parameter */
-	ali = (struct sctp_adaptation_layer_indication *)((caddr_t)initack + sizeof(*initack));
-	ali->ph.param_type = htons(SCTP_ULP_ADAPTATION);
-	ali->ph.param_length = htons(sizeof(*ali));
-	ali->indication = ntohl(inp->sctp_ep.adaptation_layer_indicator);
-	SCTP_BUF_LEN(m) += sizeof(*ali);
-	ecn = (struct sctp_ecn_supported_param *)((caddr_t)ali + sizeof(*ali));
+	if (inp->sctp_ep.adaptation_layer_indicator_provided) {
+		ali = (struct sctp_adaptation_layer_indication *)((caddr_t)initack + sizeof(*initack));
+		ali->ph.param_type = htons(SCTP_ULP_ADAPTATION);
+		ali->ph.param_length = htons(sizeof(*ali));
+		ali->indication = ntohl(inp->sctp_ep.adaptation_layer_indicator);
+		SCTP_BUF_LEN(m) += sizeof(*ali);
+		ecn = (struct sctp_ecn_supported_param *)((caddr_t)ali + sizeof(*ali));
+	} else {
+		ecn = (struct sctp_ecn_supported_param *)((caddr_t)initack + sizeof(*initack));
+	}
 
 	/* ECN parameter */
 	if (((asoc != NULL) && (asoc->ecn_allowed == 1)) ||

Modified: stable/9/sys/netinet/sctp_pcb.c
==============================================================================
--- stable/9/sys/netinet/sctp_pcb.c	Sun Jul  7 16:12:22 2013	(r252965)
+++ stable/9/sys/netinet/sctp_pcb.c	Sun Jul  7 16:13:54 2013	(r252966)
@@ -2516,7 +2516,8 @@ sctp_inpcb_alloc(struct socket *so, uint
 	m->pre_open_stream_count = SCTP_BASE_SYSCTL(sctp_nr_outgoing_streams_default);
 
 	/* Add adaptation cookie */
-	m->adaptation_layer_indicator = 0x504C5253;
+	m->adaptation_layer_indicator = 0;
+	m->adaptation_layer_indicator_provided = 0;
 
 	/* seed random number generator */
 	m->random_counter = 1;

Modified: stable/9/sys/netinet/sctp_pcb.h
==============================================================================
--- stable/9/sys/netinet/sctp_pcb.h	Sun Jul  7 16:12:22 2013	(r252965)
+++ stable/9/sys/netinet/sctp_pcb.h	Sun Jul  7 16:13:54 2013	(r252966)
@@ -323,6 +323,7 @@ struct sctp_pcb {
 	int auto_close_time;
 	uint32_t initial_sequence_debug;
 	uint32_t adaptation_layer_indicator;
+	uint8_t adaptation_layer_indicator_provided;
 	uint32_t store_at;
 	uint32_t max_burst;
 	uint32_t fr_max_burst;

Modified: stable/9/sys/netinet/sctp_usrreq.c
==============================================================================
--- stable/9/sys/netinet/sctp_usrreq.c	Sun Jul  7 16:12:22 2013	(r252965)
+++ stable/9/sys/netinet/sctp_usrreq.c	Sun Jul  7 16:13:54 2013	(r252966)
@@ -4617,6 +4617,7 @@ sctp_setopt(struct socket *so, int optna
 			SCTP_CHECK_AND_CAST(adap_bits, optval, struct sctp_setadaptation, optsize);
 			SCTP_INP_WLOCK(inp);
 			inp->sctp_ep.adaptation_layer_indicator = adap_bits->ssb_adaptation_ind;
+			inp->sctp_ep.adaptation_layer_indicator_provided = 1;
 			SCTP_INP_WUNLOCK(inp);
 			break;
 		}


More information about the svn-src-all mailing list