diff options
Diffstat (limited to 'net/sctp/outqueue.c')
| -rw-r--r-- | net/sctp/outqueue.c | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index d03682109b7..a6d27bf563a 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -754,6 +754,16 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)  	 */  	list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) { +		/* RFC 5061, 5.3 +		 * F1) This means that until such time as the ASCONF +		 * containing the add is acknowledged, the sender MUST +		 * NOT use the new IP address as a source for ANY SCTP +		 * packet except on carrying an ASCONF Chunk. +		 */ +		if (asoc->src_out_of_asoc_ok && +		    chunk->chunk_hdr->type != SCTP_CID_ASCONF) +			continue; +  		list_del_init(&chunk->list);  		/* Pick the right transport to use. */ @@ -881,6 +891,9 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)  		}  	} +	if (q->asoc->src_out_of_asoc_ok) +		goto sctp_flush_out; +  	/* Is it OK to send data chunks?  */  	switch (asoc->state) {  	case SCTP_STATE_COOKIE_ECHOED:  |