output.c revision 5a0e3ad6af8660be21ca98a971cd00f331318c05
1/* SCTP kernel implementation
2 * (C) Copyright IBM Corp. 2001, 2004
3 * Copyright (c) 1999-2000 Cisco, Inc.
4 * Copyright (c) 1999-2001 Motorola, Inc.
5 *
6 * This file is part of the SCTP kernel implementation
7 *
8 * These functions handle output processing.
9 *
10 * This SCTP implementation is free software;
11 * you can redistribute it and/or modify it under the terms of
12 * the GNU General Public License as published by
13 * the Free Software Foundation; either version 2, or (at your option)
14 * any later version.
15 *
16 * This SCTP implementation is distributed in the hope that it
17 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
18 *                 ************************
19 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 * See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with GNU CC; see the file COPYING.  If not, write to
24 * the Free Software Foundation, 59 Temple Place - Suite 330,
25 * Boston, MA 02111-1307, USA.
26 *
27 * Please send any bug reports or fixes you make to the
28 * email address(es):
29 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
30 *
31 * Or submit a bug report through the following website:
32 *    http://www.sf.net/projects/lksctp
33 *
34 * Written or modified by:
35 *    La Monte H.P. Yarroll <piggy@acm.org>
36 *    Karl Knutson          <karl@athena.chicago.il.us>
37 *    Jon Grimm             <jgrimm@austin.ibm.com>
38 *    Sridhar Samudrala     <sri@us.ibm.com>
39 *
40 * Any bugs reported given to us we will try to fix... any fixes shared will
41 * be incorporated into the next SCTP release.
42 */
43
44#include <linux/types.h>
45#include <linux/kernel.h>
46#include <linux/wait.h>
47#include <linux/time.h>
48#include <linux/ip.h>
49#include <linux/ipv6.h>
50#include <linux/init.h>
51#include <linux/slab.h>
52#include <net/inet_ecn.h>
53#include <net/ip.h>
54#include <net/icmp.h>
55#include <net/net_namespace.h>
56
57#include <linux/socket.h> /* for sa_family_t */
58#include <net/sock.h>
59
60#include <net/sctp/sctp.h>
61#include <net/sctp/sm.h>
62#include <net/sctp/checksum.h>
63
64/* Forward declarations for private helpers. */
65static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet,
66					   struct sctp_chunk *chunk);
67static void sctp_packet_append_data(struct sctp_packet *packet,
68					   struct sctp_chunk *chunk);
69static sctp_xmit_t sctp_packet_will_fit(struct sctp_packet *packet,
70					struct sctp_chunk *chunk,
71					u16 chunk_len);
72
73static void sctp_packet_reset(struct sctp_packet *packet)
74{
75	packet->size = packet->overhead;
76	packet->has_cookie_echo = 0;
77	packet->has_sack = 0;
78	packet->has_data = 0;
79	packet->has_auth = 0;
80	packet->ipfragok = 0;
81	packet->auth = NULL;
82}
83
84/* Config a packet.
85 * This appears to be a followup set of initializations.
86 */
87struct sctp_packet *sctp_packet_config(struct sctp_packet *packet,
88				       __u32 vtag, int ecn_capable)
89{
90	struct sctp_chunk *chunk = NULL;
91
92	SCTP_DEBUG_PRINTK("%s: packet:%p vtag:0x%x\n", __func__,
93			  packet, vtag);
94
95	sctp_packet_reset(packet);
96	packet->vtag = vtag;
97
98	if (ecn_capable && sctp_packet_empty(packet)) {
99		chunk = sctp_get_ecne_prepend(packet->transport->asoc);
100
101		/* If there a is a prepend chunk stick it on the list before
102		 * any other chunks get appended.
103		 */
104		if (chunk)
105			sctp_packet_append_chunk(packet, chunk);
106	}
107
108	return packet;
109}
110
111/* Initialize the packet structure. */
112struct sctp_packet *sctp_packet_init(struct sctp_packet *packet,
113				     struct sctp_transport *transport,
114				     __u16 sport, __u16 dport)
115{
116	struct sctp_association *asoc = transport->asoc;
117	size_t overhead;
118
119	SCTP_DEBUG_PRINTK("%s: packet:%p transport:%p\n", __func__,
120			  packet, transport);
121
122	packet->transport = transport;
123	packet->source_port = sport;
124	packet->destination_port = dport;
125	INIT_LIST_HEAD(&packet->chunk_list);
126	if (asoc) {
127		struct sctp_sock *sp = sctp_sk(asoc->base.sk);
128		overhead = sp->pf->af->net_header_len;
129	} else {
130		overhead = sizeof(struct ipv6hdr);
131	}
132	overhead += sizeof(struct sctphdr);
133	packet->overhead = overhead;
134	sctp_packet_reset(packet);
135	packet->vtag = 0;
136	packet->malloced = 0;
137	return packet;
138}
139
140/* Free a packet.  */
141void sctp_packet_free(struct sctp_packet *packet)
142{
143	struct sctp_chunk *chunk, *tmp;
144
145	SCTP_DEBUG_PRINTK("%s: packet:%p\n", __func__, packet);
146
147	list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) {
148		list_del_init(&chunk->list);
149		sctp_chunk_free(chunk);
150	}
151
152	if (packet->malloced)
153		kfree(packet);
154}
155
156/* This routine tries to append the chunk to the offered packet. If adding
157 * the chunk causes the packet to exceed the path MTU and COOKIE_ECHO chunk
158 * is not present in the packet, it transmits the input packet.
159 * Data can be bundled with a packet containing a COOKIE_ECHO chunk as long
160 * as it can fit in the packet, but any more data that does not fit in this
161 * packet can be sent only after receiving the COOKIE_ACK.
162 */
163sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet,
164				       struct sctp_chunk *chunk,
165				       int one_packet)
166{
167	sctp_xmit_t retval;
168	int error = 0;
169
170	SCTP_DEBUG_PRINTK("%s: packet:%p chunk:%p\n", __func__,
171			  packet, chunk);
172
173	switch ((retval = (sctp_packet_append_chunk(packet, chunk)))) {
174	case SCTP_XMIT_PMTU_FULL:
175		if (!packet->has_cookie_echo) {
176			error = sctp_packet_transmit(packet);
177			if (error < 0)
178				chunk->skb->sk->sk_err = -error;
179
180			/* If we have an empty packet, then we can NOT ever
181			 * return PMTU_FULL.
182			 */
183			if (!one_packet)
184				retval = sctp_packet_append_chunk(packet,
185								  chunk);
186		}
187		break;
188
189	case SCTP_XMIT_RWND_FULL:
190	case SCTP_XMIT_OK:
191	case SCTP_XMIT_NAGLE_DELAY:
192		break;
193	}
194
195	return retval;
196}
197
198/* Try to bundle an auth chunk into the packet. */
199static sctp_xmit_t sctp_packet_bundle_auth(struct sctp_packet *pkt,
200					   struct sctp_chunk *chunk)
201{
202	struct sctp_association *asoc = pkt->transport->asoc;
203	struct sctp_chunk *auth;
204	sctp_xmit_t retval = SCTP_XMIT_OK;
205
206	/* if we don't have an association, we can't do authentication */
207	if (!asoc)
208		return retval;
209
210	/* See if this is an auth chunk we are bundling or if
211	 * auth is already bundled.
212	 */
213	if (chunk->chunk_hdr->type == SCTP_CID_AUTH || pkt->has_auth)
214		return retval;
215
216	/* if the peer did not request this chunk to be authenticated,
217	 * don't do it
218	 */
219	if (!chunk->auth)
220		return retval;
221
222	auth = sctp_make_auth(asoc);
223	if (!auth)
224		return retval;
225
226	retval = sctp_packet_append_chunk(pkt, auth);
227
228	return retval;
229}
230
231/* Try to bundle a SACK with the packet. */
232static sctp_xmit_t sctp_packet_bundle_sack(struct sctp_packet *pkt,
233					   struct sctp_chunk *chunk)
234{
235	sctp_xmit_t retval = SCTP_XMIT_OK;
236
237	/* If sending DATA and haven't aleady bundled a SACK, try to
238	 * bundle one in to the packet.
239	 */
240	if (sctp_chunk_is_data(chunk) && !pkt->has_sack &&
241	    !pkt->has_cookie_echo) {
242		struct sctp_association *asoc;
243		struct timer_list *timer;
244		asoc = pkt->transport->asoc;
245		timer = &asoc->timers[SCTP_EVENT_TIMEOUT_SACK];
246
247		/* If the SACK timer is running, we have a pending SACK */
248		if (timer_pending(timer)) {
249			struct sctp_chunk *sack;
250			asoc->a_rwnd = asoc->rwnd;
251			sack = sctp_make_sack(asoc);
252			if (sack) {
253				retval = sctp_packet_append_chunk(pkt, sack);
254				asoc->peer.sack_needed = 0;
255				if (del_timer(timer))
256					sctp_association_put(asoc);
257			}
258		}
259	}
260	return retval;
261}
262
263/* Append a chunk to the offered packet reporting back any inability to do
264 * so.
265 */
266sctp_xmit_t sctp_packet_append_chunk(struct sctp_packet *packet,
267				     struct sctp_chunk *chunk)
268{
269	sctp_xmit_t retval = SCTP_XMIT_OK;
270	__u16 chunk_len = WORD_ROUND(ntohs(chunk->chunk_hdr->length));
271
272	SCTP_DEBUG_PRINTK("%s: packet:%p chunk:%p\n", __func__, packet,
273			  chunk);
274
275	/* Data chunks are special.  Before seeing what else we can
276	 * bundle into this packet, check to see if we are allowed to
277	 * send this DATA.
278	 */
279	if (sctp_chunk_is_data(chunk)) {
280		retval = sctp_packet_can_append_data(packet, chunk);
281		if (retval != SCTP_XMIT_OK)
282			goto finish;
283	}
284
285	/* Try to bundle AUTH chunk */
286	retval = sctp_packet_bundle_auth(packet, chunk);
287	if (retval != SCTP_XMIT_OK)
288		goto finish;
289
290	/* Try to bundle SACK chunk */
291	retval = sctp_packet_bundle_sack(packet, chunk);
292	if (retval != SCTP_XMIT_OK)
293		goto finish;
294
295	/* Check to see if this chunk will fit into the packet */
296	retval = sctp_packet_will_fit(packet, chunk, chunk_len);
297	if (retval != SCTP_XMIT_OK)
298		goto finish;
299
300	/* We believe that this chunk is OK to add to the packet */
301	switch (chunk->chunk_hdr->type) {
302	    case SCTP_CID_DATA:
303		/* Account for the data being in the packet */
304		sctp_packet_append_data(packet, chunk);
305		/* Disallow SACK bundling after DATA. */
306		packet->has_sack = 1;
307		/* Disallow AUTH bundling after DATA */
308		packet->has_auth = 1;
309		/* Let it be knows that packet has DATA in it */
310		packet->has_data = 1;
311		/* timestamp the chunk for rtx purposes */
312		chunk->sent_at = jiffies;
313		break;
314	    case SCTP_CID_COOKIE_ECHO:
315		packet->has_cookie_echo = 1;
316		break;
317
318	    case SCTP_CID_SACK:
319		packet->has_sack = 1;
320		break;
321
322	    case SCTP_CID_AUTH:
323		packet->has_auth = 1;
324		packet->auth = chunk;
325		break;
326	}
327
328	/* It is OK to send this chunk.  */
329	list_add_tail(&chunk->list, &packet->chunk_list);
330	packet->size += chunk_len;
331	chunk->transport = packet->transport;
332finish:
333	return retval;
334}
335
336/* All packets are sent to the network through this function from
337 * sctp_outq_tail().
338 *
339 * The return value is a normal kernel error return value.
340 */
341int sctp_packet_transmit(struct sctp_packet *packet)
342{
343	struct sctp_transport *tp = packet->transport;
344	struct sctp_association *asoc = tp->asoc;
345	struct sctphdr *sh;
346	struct sk_buff *nskb;
347	struct sctp_chunk *chunk, *tmp;
348	struct sock *sk;
349	int err = 0;
350	int padding;		/* How much padding do we need?  */
351	__u8 has_data = 0;
352	struct dst_entry *dst = tp->dst;
353	unsigned char *auth = NULL;	/* pointer to auth in skb data */
354	__u32 cksum_buf_len = sizeof(struct sctphdr);
355
356	SCTP_DEBUG_PRINTK("%s: packet:%p\n", __func__, packet);
357
358	/* Do NOT generate a chunkless packet. */
359	if (list_empty(&packet->chunk_list))
360		return err;
361
362	/* Set up convenience variables... */
363	chunk = list_entry(packet->chunk_list.next, struct sctp_chunk, list);
364	sk = chunk->skb->sk;
365
366	/* Allocate the new skb.  */
367	nskb = alloc_skb(packet->size + LL_MAX_HEADER, GFP_ATOMIC);
368	if (!nskb)
369		goto nomem;
370
371	/* Make sure the outbound skb has enough header room reserved. */
372	skb_reserve(nskb, packet->overhead + LL_MAX_HEADER);
373
374	/* Set the owning socket so that we know where to get the
375	 * destination IP address.
376	 */
377	skb_set_owner_w(nskb, sk);
378
379	/* The 'obsolete' field of dst is set to 2 when a dst is freed. */
380	if (!dst || (dst->obsolete > 1)) {
381		dst_release(dst);
382		sctp_transport_route(tp, NULL, sctp_sk(sk));
383		if (asoc && (asoc->param_flags & SPP_PMTUD_ENABLE)) {
384			sctp_assoc_sync_pmtu(asoc);
385		}
386	}
387	dst = dst_clone(tp->dst);
388	skb_dst_set(nskb, dst);
389	if (!dst)
390		goto no_route;
391
392	/* Build the SCTP header.  */
393	sh = (struct sctphdr *)skb_push(nskb, sizeof(struct sctphdr));
394	skb_reset_transport_header(nskb);
395	sh->source = htons(packet->source_port);
396	sh->dest   = htons(packet->destination_port);
397
398	/* From 6.8 Adler-32 Checksum Calculation:
399	 * After the packet is constructed (containing the SCTP common
400	 * header and one or more control or DATA chunks), the
401	 * transmitter shall:
402	 *
403	 * 1) Fill in the proper Verification Tag in the SCTP common
404	 *    header and initialize the checksum field to 0's.
405	 */
406	sh->vtag     = htonl(packet->vtag);
407	sh->checksum = 0;
408
409	/**
410	 * 6.10 Bundling
411	 *
412	 *    An endpoint bundles chunks by simply including multiple
413	 *    chunks in one outbound SCTP packet.  ...
414	 */
415
416	/**
417	 * 3.2  Chunk Field Descriptions
418	 *
419	 * The total length of a chunk (including Type, Length and
420	 * Value fields) MUST be a multiple of 4 bytes.  If the length
421	 * of the chunk is not a multiple of 4 bytes, the sender MUST
422	 * pad the chunk with all zero bytes and this padding is not
423	 * included in the chunk length field.  The sender should
424	 * never pad with more than 3 bytes.
425	 *
426	 * [This whole comment explains WORD_ROUND() below.]
427	 */
428	SCTP_DEBUG_PRINTK("***sctp_transmit_packet***\n");
429	list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) {
430		list_del_init(&chunk->list);
431		if (sctp_chunk_is_data(chunk)) {
432
433			if (!chunk->resent) {
434
435				/* 6.3.1 C4) When data is in flight and when allowed
436				 * by rule C5, a new RTT measurement MUST be made each
437				 * round trip.  Furthermore, new RTT measurements
438				 * SHOULD be made no more than once per round-trip
439				 * for a given destination transport address.
440				 */
441
442				if (!tp->rto_pending) {
443					chunk->rtt_in_progress = 1;
444					tp->rto_pending = 1;
445				}
446			}
447
448			chunk->resent = 1;
449
450			has_data = 1;
451		}
452
453		padding = WORD_ROUND(chunk->skb->len) - chunk->skb->len;
454		if (padding)
455			memset(skb_put(chunk->skb, padding), 0, padding);
456
457		/* if this is the auth chunk that we are adding,
458		 * store pointer where it will be added and put
459		 * the auth into the packet.
460		 */
461		if (chunk == packet->auth)
462			auth = skb_tail_pointer(nskb);
463
464		cksum_buf_len += chunk->skb->len;
465		memcpy(skb_put(nskb, chunk->skb->len),
466			       chunk->skb->data, chunk->skb->len);
467
468		SCTP_DEBUG_PRINTK("%s %p[%s] %s 0x%x, %s %d, %s %d, %s %d\n",
469				  "*** Chunk", chunk,
470				  sctp_cname(SCTP_ST_CHUNK(
471					  chunk->chunk_hdr->type)),
472				  chunk->has_tsn ? "TSN" : "No TSN",
473				  chunk->has_tsn ?
474				  ntohl(chunk->subh.data_hdr->tsn) : 0,
475				  "length", ntohs(chunk->chunk_hdr->length),
476				  "chunk->skb->len", chunk->skb->len,
477				  "rtt_in_progress", chunk->rtt_in_progress);
478
479		/*
480		 * If this is a control chunk, this is our last
481		 * reference. Free data chunks after they've been
482		 * acknowledged or have failed.
483		 */
484		if (!sctp_chunk_is_data(chunk))
485			sctp_chunk_free(chunk);
486	}
487
488	/* SCTP-AUTH, Section 6.2
489	 *    The sender MUST calculate the MAC as described in RFC2104 [2]
490	 *    using the hash function H as described by the MAC Identifier and
491	 *    the shared association key K based on the endpoint pair shared key
492	 *    described by the shared key identifier.  The 'data' used for the
493	 *    computation of the AUTH-chunk is given by the AUTH chunk with its
494	 *    HMAC field set to zero (as shown in Figure 6) followed by all
495	 *    chunks that are placed after the AUTH chunk in the SCTP packet.
496	 */
497	if (auth)
498		sctp_auth_calculate_hmac(asoc, nskb,
499					(struct sctp_auth_chunk *)auth,
500					GFP_ATOMIC);
501
502	/* 2) Calculate the Adler-32 checksum of the whole packet,
503	 *    including the SCTP common header and all the
504	 *    chunks.
505	 *
506	 * Note: Adler-32 is no longer applicable, as has been replaced
507	 * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>.
508	 */
509	if (!sctp_checksum_disable &&
510	    !(dst->dev->features & (NETIF_F_NO_CSUM | NETIF_F_SCTP_CSUM))) {
511		__u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len);
512
513		/* 3) Put the resultant value into the checksum field in the
514		 *    common header, and leave the rest of the bits unchanged.
515		 */
516		sh->checksum = sctp_end_cksum(crc32);
517	} else {
518		if (dst->dev->features & NETIF_F_SCTP_CSUM) {
519			/* no need to seed psuedo checksum for SCTP */
520			nskb->ip_summed = CHECKSUM_PARTIAL;
521			nskb->csum_start = (skb_transport_header(nskb) -
522			                    nskb->head);
523			nskb->csum_offset = offsetof(struct sctphdr, checksum);
524		} else {
525			nskb->ip_summed = CHECKSUM_UNNECESSARY;
526		}
527	}
528
529	/* IP layer ECN support
530	 * From RFC 2481
531	 *  "The ECN-Capable Transport (ECT) bit would be set by the
532	 *   data sender to indicate that the end-points of the
533	 *   transport protocol are ECN-capable."
534	 *
535	 * Now setting the ECT bit all the time, as it should not cause
536	 * any problems protocol-wise even if our peer ignores it.
537	 *
538	 * Note: The works for IPv6 layer checks this bit too later
539	 * in transmission.  See IP6_ECN_flow_xmit().
540	 */
541	(*tp->af_specific->ecn_capable)(nskb->sk);
542
543	/* Set up the IP options.  */
544	/* BUG: not implemented
545	 * For v4 this all lives somewhere in sk->sk_opt...
546	 */
547
548	/* Dump that on IP!  */
549	if (asoc && asoc->peer.last_sent_to != tp) {
550		/* Considering the multiple CPU scenario, this is a
551		 * "correcter" place for last_sent_to.  --xguo
552		 */
553		asoc->peer.last_sent_to = tp;
554	}
555
556	if (has_data) {
557		struct timer_list *timer;
558		unsigned long timeout;
559
560		/* Restart the AUTOCLOSE timer when sending data. */
561		if (sctp_state(asoc, ESTABLISHED) && asoc->autoclose) {
562			timer = &asoc->timers[SCTP_EVENT_TIMEOUT_AUTOCLOSE];
563			timeout = asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE];
564
565			if (!mod_timer(timer, jiffies + timeout))
566				sctp_association_hold(asoc);
567		}
568	}
569
570	SCTP_DEBUG_PRINTK("***sctp_transmit_packet*** skb len %d\n",
571			  nskb->len);
572
573	nskb->local_df = packet->ipfragok;
574	(*tp->af_specific->sctp_xmit)(nskb, tp);
575
576out:
577	sctp_packet_reset(packet);
578	return err;
579no_route:
580	kfree_skb(nskb);
581	IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES);
582
583	/* FIXME: Returning the 'err' will effect all the associations
584	 * associated with a socket, although only one of the paths of the
585	 * association is unreachable.
586	 * The real failure of a transport or association can be passed on
587	 * to the user via notifications. So setting this error may not be
588	 * required.
589	 */
590	 /* err = -EHOSTUNREACH; */
591err:
592	/* Control chunks are unreliable so just drop them.  DATA chunks
593	 * will get resent or dropped later.
594	 */
595
596	list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) {
597		list_del_init(&chunk->list);
598		if (!sctp_chunk_is_data(chunk))
599			sctp_chunk_free(chunk);
600	}
601	goto out;
602nomem:
603	err = -ENOMEM;
604	goto err;
605}
606
607/********************************************************************
608 * 2nd Level Abstractions
609 ********************************************************************/
610
611/* This private function check to see if a chunk can be added */
612static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet,
613					   struct sctp_chunk *chunk)
614{
615	sctp_xmit_t retval = SCTP_XMIT_OK;
616	size_t datasize, rwnd, inflight, flight_size;
617	struct sctp_transport *transport = packet->transport;
618	struct sctp_association *asoc = transport->asoc;
619	struct sctp_outq *q = &asoc->outqueue;
620
621	/* RFC 2960 6.1  Transmission of DATA Chunks
622	 *
623	 * A) At any given time, the data sender MUST NOT transmit new data to
624	 * any destination transport address if its peer's rwnd indicates
625	 * that the peer has no buffer space (i.e. rwnd is 0, see Section
626	 * 6.2.1).  However, regardless of the value of rwnd (including if it
627	 * is 0), the data sender can always have one DATA chunk in flight to
628	 * the receiver if allowed by cwnd (see rule B below).  This rule
629	 * allows the sender to probe for a change in rwnd that the sender
630	 * missed due to the SACK having been lost in transit from the data
631	 * receiver to the data sender.
632	 */
633
634	rwnd = asoc->peer.rwnd;
635	inflight = q->outstanding_bytes;
636	flight_size = transport->flight_size;
637
638	datasize = sctp_data_size(chunk);
639
640	if (datasize > rwnd) {
641		if (inflight > 0) {
642			/* We have (at least) one data chunk in flight,
643			 * so we can't fall back to rule 6.1 B).
644			 */
645			retval = SCTP_XMIT_RWND_FULL;
646			goto finish;
647		}
648	}
649
650	/* RFC 2960 6.1  Transmission of DATA Chunks
651	 *
652	 * B) At any given time, the sender MUST NOT transmit new data
653	 * to a given transport address if it has cwnd or more bytes
654	 * of data outstanding to that transport address.
655	 */
656	/* RFC 7.2.4 & the Implementers Guide 2.8.
657	 *
658	 * 3) ...
659	 *    When a Fast Retransmit is being performed the sender SHOULD
660	 *    ignore the value of cwnd and SHOULD NOT delay retransmission.
661	 */
662	if (chunk->fast_retransmit != SCTP_NEED_FRTX)
663		if (flight_size >= transport->cwnd) {
664			retval = SCTP_XMIT_RWND_FULL;
665			goto finish;
666		}
667
668	/* Nagle's algorithm to solve small-packet problem:
669	 * Inhibit the sending of new chunks when new outgoing data arrives
670	 * if any previously transmitted data on the connection remains
671	 * unacknowledged.
672	 */
673	if (!sctp_sk(asoc->base.sk)->nodelay && sctp_packet_empty(packet) &&
674	    inflight && sctp_state(asoc, ESTABLISHED)) {
675		unsigned max = transport->pathmtu - packet->overhead;
676		unsigned len = chunk->skb->len + q->out_qlen;
677
678		/* Check whether this chunk and all the rest of pending
679		 * data will fit or delay in hopes of bundling a full
680		 * sized packet.
681		 * Don't delay large message writes that may have been
682		 * fragmeneted into small peices.
683		 */
684		if ((len < max) && (chunk->msg->msg_size < max)) {
685			retval = SCTP_XMIT_NAGLE_DELAY;
686			goto finish;
687		}
688	}
689
690finish:
691	return retval;
692}
693
694/* This private function does management things when adding DATA chunk */
695static void sctp_packet_append_data(struct sctp_packet *packet,
696				struct sctp_chunk *chunk)
697{
698	struct sctp_transport *transport = packet->transport;
699	size_t datasize = sctp_data_size(chunk);
700	struct sctp_association *asoc = transport->asoc;
701	u32 rwnd = asoc->peer.rwnd;
702
703	/* Keep track of how many bytes are in flight over this transport. */
704	transport->flight_size += datasize;
705
706	/* Keep track of how many bytes are in flight to the receiver. */
707	asoc->outqueue.outstanding_bytes += datasize;
708
709	/* Update our view of the receiver's rwnd. Include sk_buff overhead
710	 * while updating peer.rwnd so that it reduces the chances of a
711	 * receiver running out of receive buffer space even when receive
712	 * window is still open. This can happen when a sender is sending
713	 * sending small messages.
714	 */
715	datasize += sizeof(struct sk_buff);
716	if (datasize < rwnd)
717		rwnd -= datasize;
718	else
719		rwnd = 0;
720
721	asoc->peer.rwnd = rwnd;
722	/* Has been accepted for transmission. */
723	if (!asoc->peer.prsctp_capable)
724		chunk->msg->can_abandon = 0;
725	sctp_chunk_assign_tsn(chunk);
726	sctp_chunk_assign_ssn(chunk);
727}
728
729static sctp_xmit_t sctp_packet_will_fit(struct sctp_packet *packet,
730					struct sctp_chunk *chunk,
731					u16 chunk_len)
732{
733	size_t psize;
734	size_t pmtu;
735	int too_big;
736	sctp_xmit_t retval = SCTP_XMIT_OK;
737
738	psize = packet->size;
739	pmtu  = ((packet->transport->asoc) ?
740		(packet->transport->asoc->pathmtu) :
741		(packet->transport->pathmtu));
742
743	too_big = (psize + chunk_len > pmtu);
744
745	/* Decide if we need to fragment or resubmit later. */
746	if (too_big) {
747		/* It's OK to fragmet at IP level if any one of the following
748		 * is true:
749		 * 	1. The packet is empty (meaning this chunk is greater
750		 * 	   the MTU)
751		 * 	2. The chunk we are adding is a control chunk
752		 * 	3. The packet doesn't have any data in it yet and data
753		 * 	requires authentication.
754		 */
755		if (sctp_packet_empty(packet) || !sctp_chunk_is_data(chunk) ||
756		    (!packet->has_data && chunk->auth)) {
757			/* We no longer do re-fragmentation.
758			 * Just fragment at the IP layer, if we
759			 * actually hit this condition
760			 */
761			packet->ipfragok = 1;
762		} else {
763			retval = SCTP_XMIT_PMTU_FULL;
764		}
765	}
766
767	return retval;
768}
769