xref: /openbmc/linux/net/dccp/output.c (revision 9b8321531a90c400e9c561d903926eee79639dcf)
1 /*
2  *  net/dccp/output.c
3  *
4  *  An implementation of the DCCP protocol
5  *  Arnaldo Carvalho de Melo <acme@conectiva.com.br>
6  *
7  *	This program is free software; you can redistribute it and/or
8  *	modify it under the terms of the GNU General Public License
9  *	as published by the Free Software Foundation; either version
10  *	2 of the License, or (at your option) any later version.
11  */
12 
13 #include <linux/dccp.h>
14 #include <linux/kernel.h>
15 #include <linux/skbuff.h>
16 #include <linux/slab.h>
17 
18 #include <net/inet_sock.h>
19 #include <net/sock.h>
20 
21 #include "ackvec.h"
22 #include "ccid.h"
23 #include "dccp.h"
24 
25 static inline void dccp_event_ack_sent(struct sock *sk)
26 {
27 	inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK);
28 }
29 
30 static void dccp_skb_entail(struct sock *sk, struct sk_buff *skb)
31 {
32 	skb_set_owner_w(skb, sk);
33 	WARN_ON(sk->sk_send_head);
34 	sk->sk_send_head = skb;
35 }
36 
37 /*
38  * All SKB's seen here are completely headerless. It is our
39  * job to build the DCCP header, and pass the packet down to
40  * IP so it can do the same plus pass the packet off to the
41  * device.
42  */
43 static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
44 {
45 	if (likely(skb != NULL)) {
46 		const struct inet_sock *inet = inet_sk(sk);
47 		const struct inet_connection_sock *icsk = inet_csk(sk);
48 		struct dccp_sock *dp = dccp_sk(sk);
49 		struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
50 		struct dccp_hdr *dh;
51 		/* XXX For now we're using only 48 bits sequence numbers */
52 		const u32 dccp_header_size = sizeof(*dh) +
53 					     sizeof(struct dccp_hdr_ext) +
54 					  dccp_packet_hdr_len(dcb->dccpd_type);
55 		int err, set_ack = 1;
56 		u64 ackno = dp->dccps_gsr;
57 		/*
58 		 * Increment GSS here already in case the option code needs it.
59 		 * Update GSS for real only if option processing below succeeds.
60 		 */
61 		dcb->dccpd_seq = ADD48(dp->dccps_gss, 1);
62 
63 		switch (dcb->dccpd_type) {
64 		case DCCP_PKT_DATA:
65 			set_ack = 0;
66 			/* fall through */
67 		case DCCP_PKT_DATAACK:
68 		case DCCP_PKT_RESET:
69 			break;
70 
71 		case DCCP_PKT_REQUEST:
72 			set_ack = 0;
73 			/* Use ISS on the first (non-retransmitted) Request. */
74 			if (icsk->icsk_retransmits == 0)
75 				dcb->dccpd_seq = dp->dccps_iss;
76 			/* fall through */
77 
78 		case DCCP_PKT_SYNC:
79 		case DCCP_PKT_SYNCACK:
80 			ackno = dcb->dccpd_ack_seq;
81 			/* fall through */
82 		default:
83 			/*
84 			 * Set owner/destructor: some skbs are allocated via
85 			 * alloc_skb (e.g. when retransmission may happen).
86 			 * Only Data, DataAck, and Reset packets should come
87 			 * through here with skb->sk set.
88 			 */
89 			WARN_ON(skb->sk);
90 			skb_set_owner_w(skb, sk);
91 			break;
92 		}
93 
94 		if (dccp_insert_options(sk, skb)) {
95 			kfree_skb(skb);
96 			return -EPROTO;
97 		}
98 
99 
100 		/* Build DCCP header and checksum it. */
101 		dh = dccp_zeroed_hdr(skb, dccp_header_size);
102 		dh->dccph_type	= dcb->dccpd_type;
103 		dh->dccph_sport	= inet->inet_sport;
104 		dh->dccph_dport	= inet->inet_dport;
105 		dh->dccph_doff	= (dccp_header_size + dcb->dccpd_opt_len) / 4;
106 		dh->dccph_ccval	= dcb->dccpd_ccval;
107 		dh->dccph_cscov = dp->dccps_pcslen;
108 		/* XXX For now we're using only 48 bits sequence numbers */
109 		dh->dccph_x	= 1;
110 
111 		dccp_update_gss(sk, dcb->dccpd_seq);
112 		dccp_hdr_set_seq(dh, dp->dccps_gss);
113 		if (set_ack)
114 			dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), ackno);
115 
116 		switch (dcb->dccpd_type) {
117 		case DCCP_PKT_REQUEST:
118 			dccp_hdr_request(skb)->dccph_req_service =
119 							dp->dccps_service;
120 			/*
121 			 * Limit Ack window to ISS <= P.ackno <= GSS, so that
122 			 * only Responses to Requests we sent are considered.
123 			 */
124 			dp->dccps_awl = dp->dccps_iss;
125 			break;
126 		case DCCP_PKT_RESET:
127 			dccp_hdr_reset(skb)->dccph_reset_code =
128 							dcb->dccpd_reset_code;
129 			break;
130 		}
131 
132 		icsk->icsk_af_ops->send_check(sk, skb);
133 
134 		if (set_ack)
135 			dccp_event_ack_sent(sk);
136 
137 		DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
138 
139 		err = icsk->icsk_af_ops->queue_xmit(skb);
140 		return net_xmit_eval(err);
141 	}
142 	return -ENOBUFS;
143 }
144 
145 /**
146  * dccp_determine_ccmps  -  Find out about CCID-specfic packet-size limits
147  * We only consider the HC-sender CCID for setting the CCMPS (RFC 4340, 14.),
148  * since the RX CCID is restricted to feedback packets (Acks), which are small
149  * in comparison with the data traffic. A value of 0 means "no current CCMPS".
150  */
151 static u32 dccp_determine_ccmps(const struct dccp_sock *dp)
152 {
153 	const struct ccid *tx_ccid = dp->dccps_hc_tx_ccid;
154 
155 	if (tx_ccid == NULL || tx_ccid->ccid_ops == NULL)
156 		return 0;
157 	return tx_ccid->ccid_ops->ccid_ccmps;
158 }
159 
160 unsigned int dccp_sync_mss(struct sock *sk, u32 pmtu)
161 {
162 	struct inet_connection_sock *icsk = inet_csk(sk);
163 	struct dccp_sock *dp = dccp_sk(sk);
164 	u32 ccmps = dccp_determine_ccmps(dp);
165 	u32 cur_mps = ccmps ? min(pmtu, ccmps) : pmtu;
166 
167 	/* Account for header lengths and IPv4/v6 option overhead */
168 	cur_mps -= (icsk->icsk_af_ops->net_header_len + icsk->icsk_ext_hdr_len +
169 		    sizeof(struct dccp_hdr) + sizeof(struct dccp_hdr_ext));
170 
171 	/*
172 	 * Leave enough headroom for common DCCP header options.
173 	 * This only considers options which may appear on DCCP-Data packets, as
174 	 * per table 3 in RFC 4340, 5.8. When running out of space for other
175 	 * options (eg. Ack Vector which can take up to 255 bytes), it is better
176 	 * to schedule a separate Ack. Thus we leave headroom for the following:
177 	 *  - 1 byte for Slow Receiver (11.6)
178 	 *  - 6 bytes for Timestamp (13.1)
179 	 *  - 10 bytes for Timestamp Echo (13.3)
180 	 *  - 8 bytes for NDP count (7.7, when activated)
181 	 *  - 6 bytes for Data Checksum (9.3)
182 	 *  - %DCCPAV_MIN_OPTLEN bytes for Ack Vector size (11.4, when enabled)
183 	 */
184 	cur_mps -= roundup(1 + 6 + 10 + dp->dccps_send_ndp_count * 8 + 6 +
185 			   (dp->dccps_hc_rx_ackvec ? DCCPAV_MIN_OPTLEN : 0), 4);
186 
187 	/* And store cached results */
188 	icsk->icsk_pmtu_cookie = pmtu;
189 	dp->dccps_mss_cache = cur_mps;
190 
191 	return cur_mps;
192 }
193 
194 EXPORT_SYMBOL_GPL(dccp_sync_mss);
195 
196 void dccp_write_space(struct sock *sk)
197 {
198 	struct socket_wq *wq;
199 
200 	rcu_read_lock();
201 	wq = rcu_dereference(sk->sk_wq);
202 	if (wq_has_sleeper(wq))
203 		wake_up_interruptible(&wq->wait);
204 	/* Should agree with poll, otherwise some programs break */
205 	if (sock_writeable(sk))
206 		sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
207 
208 	rcu_read_unlock();
209 }
210 
211 /**
212  * dccp_wait_for_ccid  -  Await CCID send permission
213  * @sk:    socket to wait for
214  * @delay: timeout in jiffies
215  * This is used by CCIDs which need to delay the send time in process context.
216  */
217 static int dccp_wait_for_ccid(struct sock *sk, unsigned long delay)
218 {
219 	DEFINE_WAIT(wait);
220 	long remaining;
221 
222 	prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
223 	sk->sk_write_pending++;
224 	release_sock(sk);
225 
226 	remaining = schedule_timeout(delay);
227 
228 	lock_sock(sk);
229 	sk->sk_write_pending--;
230 	finish_wait(sk_sleep(sk), &wait);
231 
232 	if (signal_pending(current) || sk->sk_err)
233 		return -1;
234 	return remaining;
235 }
236 
237 /**
238  * dccp_xmit_packet  -  Send data packet under control of CCID
239  * Transmits next-queued payload and informs CCID to account for the packet.
240  */
241 static void dccp_xmit_packet(struct sock *sk)
242 {
243 	int err, len;
244 	struct dccp_sock *dp = dccp_sk(sk);
245 	struct sk_buff *skb = skb_dequeue(&sk->sk_write_queue);
246 
247 	if (unlikely(skb == NULL))
248 		return;
249 	len = skb->len;
250 
251 	if (sk->sk_state == DCCP_PARTOPEN) {
252 		const u32 cur_mps = dp->dccps_mss_cache - DCCP_FEATNEG_OVERHEAD;
253 		/*
254 		 * See 8.1.5 - Handshake Completion.
255 		 *
256 		 * For robustness we resend Confirm options until the client has
257 		 * entered OPEN. During the initial feature negotiation, the MPS
258 		 * is smaller than usual, reduced by the Change/Confirm options.
259 		 */
260 		if (!list_empty(&dp->dccps_featneg) && len > cur_mps) {
261 			DCCP_WARN("Payload too large (%d) for featneg.\n", len);
262 			dccp_send_ack(sk);
263 			dccp_feat_list_purge(&dp->dccps_featneg);
264 		}
265 
266 		inet_csk_schedule_ack(sk);
267 		inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
268 					      inet_csk(sk)->icsk_rto,
269 					      DCCP_RTO_MAX);
270 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_DATAACK;
271 	} else if (dccp_ack_pending(sk)) {
272 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_DATAACK;
273 	} else {
274 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_DATA;
275 	}
276 
277 	err = dccp_transmit_skb(sk, skb);
278 	if (err)
279 		dccp_pr_debug("transmit_skb() returned err=%d\n", err);
280 	/*
281 	 * Register this one as sent even if an error occurred. To the remote
282 	 * end a local packet drop is indistinguishable from network loss, i.e.
283 	 * any local drop will eventually be reported via receiver feedback.
284 	 */
285 	ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, len);
286 }
287 
288 /**
289  * dccp_flush_write_queue  -  Drain queue at end of connection
290  * Since dccp_sendmsg queues packets without waiting for them to be sent, it may
291  * happen that the TX queue is not empty at the end of a connection. We give the
292  * HC-sender CCID a grace period of up to @time_budget jiffies. If this function
293  * returns with a non-empty write queue, it will be purged later.
294  */
295 void dccp_flush_write_queue(struct sock *sk, long *time_budget)
296 {
297 	struct dccp_sock *dp = dccp_sk(sk);
298 	struct sk_buff *skb;
299 	long delay, rc;
300 
301 	while (*time_budget > 0 && (skb = skb_peek(&sk->sk_write_queue))) {
302 		rc = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
303 
304 		switch (ccid_packet_dequeue_eval(rc)) {
305 		case CCID_PACKET_WILL_DEQUEUE_LATER:
306 			/*
307 			 * If the CCID determines when to send, the next sending
308 			 * time is unknown or the CCID may not even send again
309 			 * (e.g. remote host crashes or lost Ack packets).
310 			 */
311 			DCCP_WARN("CCID did not manage to send all packets\n");
312 			return;
313 		case CCID_PACKET_DELAY:
314 			delay = msecs_to_jiffies(rc);
315 			if (delay > *time_budget)
316 				return;
317 			rc = dccp_wait_for_ccid(sk, delay);
318 			if (rc < 0)
319 				return;
320 			*time_budget -= (delay - rc);
321 			/* check again if we can send now */
322 			break;
323 		case CCID_PACKET_SEND_AT_ONCE:
324 			dccp_xmit_packet(sk);
325 			break;
326 		case CCID_PACKET_ERR:
327 			skb_dequeue(&sk->sk_write_queue);
328 			kfree_skb(skb);
329 			dccp_pr_debug("packet discarded due to err=%ld\n", rc);
330 		}
331 	}
332 }
333 
334 void dccp_write_xmit(struct sock *sk)
335 {
336 	struct dccp_sock *dp = dccp_sk(sk);
337 	struct sk_buff *skb;
338 
339 	while ((skb = skb_peek(&sk->sk_write_queue))) {
340 		int rc = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
341 
342 		switch (ccid_packet_dequeue_eval(rc)) {
343 		case CCID_PACKET_WILL_DEQUEUE_LATER:
344 			return;
345 		case CCID_PACKET_DELAY:
346 			sk_reset_timer(sk, &dp->dccps_xmit_timer,
347 				       jiffies + msecs_to_jiffies(rc));
348 			return;
349 		case CCID_PACKET_SEND_AT_ONCE:
350 			dccp_xmit_packet(sk);
351 			break;
352 		case CCID_PACKET_ERR:
353 			skb_dequeue(&sk->sk_write_queue);
354 			kfree_skb(skb);
355 			dccp_pr_debug("packet discarded due to err=%d\n", rc);
356 		}
357 	}
358 }
359 
360 /**
361  * dccp_retransmit_skb  -  Retransmit Request, Close, or CloseReq packets
362  * There are only four retransmittable packet types in DCCP:
363  * - Request  in client-REQUEST  state (sec. 8.1.1),
364  * - CloseReq in server-CLOSEREQ state (sec. 8.3),
365  * - Close    in   node-CLOSING  state (sec. 8.3),
366  * - Acks in client-PARTOPEN state (sec. 8.1.5, handled by dccp_delack_timer()).
367  * This function expects sk->sk_send_head to contain the original skb.
368  */
369 int dccp_retransmit_skb(struct sock *sk)
370 {
371 	WARN_ON(sk->sk_send_head == NULL);
372 
373 	if (inet_csk(sk)->icsk_af_ops->rebuild_header(sk) != 0)
374 		return -EHOSTUNREACH; /* Routing failure or similar. */
375 
376 	/* this count is used to distinguish original and retransmitted skb */
377 	inet_csk(sk)->icsk_retransmits++;
378 
379 	return dccp_transmit_skb(sk, skb_clone(sk->sk_send_head, GFP_ATOMIC));
380 }
381 
382 struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
383 				   struct request_sock *req)
384 {
385 	struct dccp_hdr *dh;
386 	struct dccp_request_sock *dreq;
387 	const u32 dccp_header_size = sizeof(struct dccp_hdr) +
388 				     sizeof(struct dccp_hdr_ext) +
389 				     sizeof(struct dccp_hdr_response);
390 	struct sk_buff *skb = sock_wmalloc(sk, sk->sk_prot->max_header, 1,
391 					   GFP_ATOMIC);
392 	if (skb == NULL)
393 		return NULL;
394 
395 	/* Reserve space for headers. */
396 	skb_reserve(skb, sk->sk_prot->max_header);
397 
398 	skb_dst_set(skb, dst_clone(dst));
399 
400 	dreq = dccp_rsk(req);
401 	if (inet_rsk(req)->acked)	/* increase ISS upon retransmission */
402 		dccp_inc_seqno(&dreq->dreq_iss);
403 	DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_RESPONSE;
404 	DCCP_SKB_CB(skb)->dccpd_seq  = dreq->dreq_iss;
405 
406 	/* Resolve feature dependencies resulting from choice of CCID */
407 	if (dccp_feat_server_ccid_dependencies(dreq))
408 		goto response_failed;
409 
410 	if (dccp_insert_options_rsk(dreq, skb))
411 		goto response_failed;
412 
413 	/* Build and checksum header */
414 	dh = dccp_zeroed_hdr(skb, dccp_header_size);
415 
416 	dh->dccph_sport	= inet_rsk(req)->loc_port;
417 	dh->dccph_dport	= inet_rsk(req)->rmt_port;
418 	dh->dccph_doff	= (dccp_header_size +
419 			   DCCP_SKB_CB(skb)->dccpd_opt_len) / 4;
420 	dh->dccph_type	= DCCP_PKT_RESPONSE;
421 	dh->dccph_x	= 1;
422 	dccp_hdr_set_seq(dh, dreq->dreq_iss);
423 	dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), dreq->dreq_isr);
424 	dccp_hdr_response(skb)->dccph_resp_service = dreq->dreq_service;
425 
426 	dccp_csum_outgoing(skb);
427 
428 	/* We use `acked' to remember that a Response was already sent. */
429 	inet_rsk(req)->acked = 1;
430 	DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
431 	return skb;
432 response_failed:
433 	kfree_skb(skb);
434 	return NULL;
435 }
436 
437 EXPORT_SYMBOL_GPL(dccp_make_response);
438 
439 /* answer offending packet in @rcv_skb with Reset from control socket @ctl */
440 struct sk_buff *dccp_ctl_make_reset(struct sock *sk, struct sk_buff *rcv_skb)
441 {
442 	struct dccp_hdr *rxdh = dccp_hdr(rcv_skb), *dh;
443 	struct dccp_skb_cb *dcb = DCCP_SKB_CB(rcv_skb);
444 	const u32 dccp_hdr_reset_len = sizeof(struct dccp_hdr) +
445 				       sizeof(struct dccp_hdr_ext) +
446 				       sizeof(struct dccp_hdr_reset);
447 	struct dccp_hdr_reset *dhr;
448 	struct sk_buff *skb;
449 
450 	skb = alloc_skb(sk->sk_prot->max_header, GFP_ATOMIC);
451 	if (skb == NULL)
452 		return NULL;
453 
454 	skb_reserve(skb, sk->sk_prot->max_header);
455 
456 	/* Swap the send and the receive. */
457 	dh = dccp_zeroed_hdr(skb, dccp_hdr_reset_len);
458 	dh->dccph_type	= DCCP_PKT_RESET;
459 	dh->dccph_sport	= rxdh->dccph_dport;
460 	dh->dccph_dport	= rxdh->dccph_sport;
461 	dh->dccph_doff	= dccp_hdr_reset_len / 4;
462 	dh->dccph_x	= 1;
463 
464 	dhr = dccp_hdr_reset(skb);
465 	dhr->dccph_reset_code = dcb->dccpd_reset_code;
466 
467 	switch (dcb->dccpd_reset_code) {
468 	case DCCP_RESET_CODE_PACKET_ERROR:
469 		dhr->dccph_reset_data[0] = rxdh->dccph_type;
470 		break;
471 	case DCCP_RESET_CODE_OPTION_ERROR:	/* fall through */
472 	case DCCP_RESET_CODE_MANDATORY_ERROR:
473 		memcpy(dhr->dccph_reset_data, dcb->dccpd_reset_data, 3);
474 		break;
475 	}
476 	/*
477 	 * From RFC 4340, 8.3.1:
478 	 *   If P.ackno exists, set R.seqno := P.ackno + 1.
479 	 *   Else set R.seqno := 0.
480 	 */
481 	if (dcb->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ)
482 		dccp_hdr_set_seq(dh, ADD48(dcb->dccpd_ack_seq, 1));
483 	dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), dcb->dccpd_seq);
484 
485 	dccp_csum_outgoing(skb);
486 	return skb;
487 }
488 
489 EXPORT_SYMBOL_GPL(dccp_ctl_make_reset);
490 
491 /* send Reset on established socket, to close or abort the connection */
492 int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
493 {
494 	struct sk_buff *skb;
495 	/*
496 	 * FIXME: what if rebuild_header fails?
497 	 * Should we be doing a rebuild_header here?
498 	 */
499 	int err = inet_csk(sk)->icsk_af_ops->rebuild_header(sk);
500 
501 	if (err != 0)
502 		return err;
503 
504 	skb = sock_wmalloc(sk, sk->sk_prot->max_header, 1, GFP_ATOMIC);
505 	if (skb == NULL)
506 		return -ENOBUFS;
507 
508 	/* Reserve space for headers and prepare control bits. */
509 	skb_reserve(skb, sk->sk_prot->max_header);
510 	DCCP_SKB_CB(skb)->dccpd_type	   = DCCP_PKT_RESET;
511 	DCCP_SKB_CB(skb)->dccpd_reset_code = code;
512 
513 	return dccp_transmit_skb(sk, skb);
514 }
515 
516 /*
517  * Do all connect socket setups that can be done AF independent.
518  */
519 int dccp_connect(struct sock *sk)
520 {
521 	struct sk_buff *skb;
522 	struct dccp_sock *dp = dccp_sk(sk);
523 	struct dst_entry *dst = __sk_dst_get(sk);
524 	struct inet_connection_sock *icsk = inet_csk(sk);
525 
526 	sk->sk_err = 0;
527 	sock_reset_flag(sk, SOCK_DONE);
528 
529 	dccp_sync_mss(sk, dst_mtu(dst));
530 
531 	/* do not connect if feature negotiation setup fails */
532 	if (dccp_feat_finalise_settings(dccp_sk(sk)))
533 		return -EPROTO;
534 
535 	/* Initialise GAR as per 8.5; AWL/AWH are set in dccp_transmit_skb() */
536 	dp->dccps_gar = dp->dccps_iss;
537 
538 	skb = alloc_skb(sk->sk_prot->max_header, sk->sk_allocation);
539 	if (unlikely(skb == NULL))
540 		return -ENOBUFS;
541 
542 	/* Reserve space for headers. */
543 	skb_reserve(skb, sk->sk_prot->max_header);
544 
545 	DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_REQUEST;
546 
547 	dccp_skb_entail(sk, skb);
548 	dccp_transmit_skb(sk, skb_clone(skb, GFP_KERNEL));
549 	DCCP_INC_STATS(DCCP_MIB_ACTIVEOPENS);
550 
551 	/* Timer for repeating the REQUEST until an answer. */
552 	icsk->icsk_retransmits = 0;
553 	inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
554 				  icsk->icsk_rto, DCCP_RTO_MAX);
555 	return 0;
556 }
557 
558 EXPORT_SYMBOL_GPL(dccp_connect);
559 
560 void dccp_send_ack(struct sock *sk)
561 {
562 	/* If we have been reset, we may not send again. */
563 	if (sk->sk_state != DCCP_CLOSED) {
564 		struct sk_buff *skb = alloc_skb(sk->sk_prot->max_header,
565 						GFP_ATOMIC);
566 
567 		if (skb == NULL) {
568 			inet_csk_schedule_ack(sk);
569 			inet_csk(sk)->icsk_ack.ato = TCP_ATO_MIN;
570 			inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
571 						  TCP_DELACK_MAX,
572 						  DCCP_RTO_MAX);
573 			return;
574 		}
575 
576 		/* Reserve space for headers */
577 		skb_reserve(skb, sk->sk_prot->max_header);
578 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_ACK;
579 		dccp_transmit_skb(sk, skb);
580 	}
581 }
582 
583 EXPORT_SYMBOL_GPL(dccp_send_ack);
584 
585 #if 0
586 /* FIXME: Is this still necessary (11.3) - currently nowhere used by DCCP. */
587 void dccp_send_delayed_ack(struct sock *sk)
588 {
589 	struct inet_connection_sock *icsk = inet_csk(sk);
590 	/*
591 	 * FIXME: tune this timer. elapsed time fixes the skew, so no problem
592 	 * with using 2s, and active senders also piggyback the ACK into a
593 	 * DATAACK packet, so this is really for quiescent senders.
594 	 */
595 	unsigned long timeout = jiffies + 2 * HZ;
596 
597 	/* Use new timeout only if there wasn't a older one earlier. */
598 	if (icsk->icsk_ack.pending & ICSK_ACK_TIMER) {
599 		/* If delack timer was blocked or is about to expire,
600 		 * send ACK now.
601 		 *
602 		 * FIXME: check the "about to expire" part
603 		 */
604 		if (icsk->icsk_ack.blocked) {
605 			dccp_send_ack(sk);
606 			return;
607 		}
608 
609 		if (!time_before(timeout, icsk->icsk_ack.timeout))
610 			timeout = icsk->icsk_ack.timeout;
611 	}
612 	icsk->icsk_ack.pending |= ICSK_ACK_SCHED | ICSK_ACK_TIMER;
613 	icsk->icsk_ack.timeout = timeout;
614 	sk_reset_timer(sk, &icsk->icsk_delack_timer, timeout);
615 }
616 #endif
617 
618 void dccp_send_sync(struct sock *sk, const u64 ackno,
619 		    const enum dccp_pkt_type pkt_type)
620 {
621 	/*
622 	 * We are not putting this on the write queue, so
623 	 * dccp_transmit_skb() will set the ownership to this
624 	 * sock.
625 	 */
626 	struct sk_buff *skb = alloc_skb(sk->sk_prot->max_header, GFP_ATOMIC);
627 
628 	if (skb == NULL) {
629 		/* FIXME: how to make sure the sync is sent? */
630 		DCCP_CRIT("could not send %s", dccp_packet_name(pkt_type));
631 		return;
632 	}
633 
634 	/* Reserve space for headers and prepare control bits. */
635 	skb_reserve(skb, sk->sk_prot->max_header);
636 	DCCP_SKB_CB(skb)->dccpd_type = pkt_type;
637 	DCCP_SKB_CB(skb)->dccpd_ack_seq = ackno;
638 
639 	dccp_transmit_skb(sk, skb);
640 }
641 
642 EXPORT_SYMBOL_GPL(dccp_send_sync);
643 
644 /*
645  * Send a DCCP_PKT_CLOSE/CLOSEREQ. The caller locks the socket for us. This
646  * cannot be allowed to fail queueing a DCCP_PKT_CLOSE/CLOSEREQ frame under
647  * any circumstances.
648  */
649 void dccp_send_close(struct sock *sk, const int active)
650 {
651 	struct dccp_sock *dp = dccp_sk(sk);
652 	struct sk_buff *skb;
653 	const gfp_t prio = active ? GFP_KERNEL : GFP_ATOMIC;
654 
655 	skb = alloc_skb(sk->sk_prot->max_header, prio);
656 	if (skb == NULL)
657 		return;
658 
659 	/* Reserve space for headers and prepare control bits. */
660 	skb_reserve(skb, sk->sk_prot->max_header);
661 	if (dp->dccps_role == DCCP_ROLE_SERVER && !dp->dccps_server_timewait)
662 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSEREQ;
663 	else
664 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSE;
665 
666 	if (active) {
667 		dccp_skb_entail(sk, skb);
668 		dccp_transmit_skb(sk, skb_clone(skb, prio));
669 		/*
670 		 * Retransmission timer for active-close: RFC 4340, 8.3 requires
671 		 * to retransmit the Close/CloseReq until the CLOSING/CLOSEREQ
672 		 * state can be left. The initial timeout is 2 RTTs.
673 		 * Since RTT measurement is done by the CCIDs, there is no easy
674 		 * way to get an RTT sample. The fallback RTT from RFC 4340, 3.4
675 		 * is too low (200ms); we use a high value to avoid unnecessary
676 		 * retransmissions when the link RTT is > 0.2 seconds.
677 		 * FIXME: Let main module sample RTTs and use that instead.
678 		 */
679 		inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
680 					  DCCP_TIMEOUT_INIT, DCCP_RTO_MAX);
681 	} else
682 		dccp_transmit_skb(sk, skb);
683 }
684