svn commit: r248023 - stable/8/sys/netinet
Michael Tuexen
tuexen at FreeBSD.org
Fri Mar 8 01:31:15 UTC 2013
Author: tuexen
Date: Fri Mar 8 01:31:14 2013
New Revision: 248023
URL: http://svnweb.freebsd.org/changeset/base/248023
Log:
MFC r246687:
Send the adaptation layer indication only if set by the user.
Modified:
stable/8/sys/netinet/sctp_output.c
stable/8/sys/netinet/sctp_pcb.c
stable/8/sys/netinet/sctp_pcb.h
stable/8/sys/netinet/sctp_usrreq.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/netinet/ (props changed)
Modified: stable/8/sys/netinet/sctp_output.c
==============================================================================
--- stable/8/sys/netinet/sctp_output.c Fri Mar 8 01:29:05 2013 (r248022)
+++ stable/8/sys/netinet/sctp_output.c Fri Mar 8 01:31:14 2013 (r248023)
@@ -4648,19 +4648,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) {
@@ -5728,12 +5728,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/8/sys/netinet/sctp_pcb.c
==============================================================================
--- stable/8/sys/netinet/sctp_pcb.c Fri Mar 8 01:29:05 2013 (r248022)
+++ stable/8/sys/netinet/sctp_pcb.c Fri Mar 8 01:31:14 2013 (r248023)
@@ -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/8/sys/netinet/sctp_pcb.h
==============================================================================
--- stable/8/sys/netinet/sctp_pcb.h Fri Mar 8 01:29:05 2013 (r248022)
+++ stable/8/sys/netinet/sctp_pcb.h Fri Mar 8 01:31:14 2013 (r248023)
@@ -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/8/sys/netinet/sctp_usrreq.c
==============================================================================
--- stable/8/sys/netinet/sctp_usrreq.c Fri Mar 8 01:29:05 2013 (r248022)
+++ stable/8/sys/netinet/sctp_usrreq.c Fri Mar 8 01:31:14 2013 (r248023)
@@ -4585,6 +4585,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-stable
mailing list