xref: /openbmc/linux/net/dccp/output.c (revision 643d1f7f)
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 
17 #include <net/inet_sock.h>
18 #include <net/sock.h>
19 
20 #include "ackvec.h"
21 #include "ccid.h"
22 #include "dccp.h"
23 
24 static inline void dccp_event_ack_sent(struct sock *sk)
25 {
26 	inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK);
27 }
28 
29 static void dccp_skb_entail(struct sock *sk, struct sk_buff *skb)
30 {
31 	skb_set_owner_w(skb, sk);
32 	WARN_ON(sk->sk_send_head);
33 	sk->sk_send_head = skb;
34 }
35 
36 /*
37  * All SKB's seen here are completely headerless. It is our
38  * job to build the DCCP header, and pass the packet down to
39  * IP so it can do the same plus pass the packet off to the
40  * device.
41  */
42 static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
43 {
44 	if (likely(skb != NULL)) {
45 		const struct inet_sock *inet = inet_sk(sk);
46 		const struct inet_connection_sock *icsk = inet_csk(sk);
47 		struct dccp_sock *dp = dccp_sk(sk);
48 		struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
49 		struct dccp_hdr *dh;
50 		/* XXX For now we're using only 48 bits sequence numbers */
51 		const u32 dccp_header_size = sizeof(*dh) +
52 					     sizeof(struct dccp_hdr_ext) +
53 					  dccp_packet_hdr_len(dcb->dccpd_type);
54 		int err, set_ack = 1;
55 		u64 ackno = dp->dccps_gsr;
56 
57 		dccp_inc_seqno(&dp->dccps_gss);
58 
59 		switch (dcb->dccpd_type) {
60 		case DCCP_PKT_DATA:
61 			set_ack = 0;
62 			/* fall through */
63 		case DCCP_PKT_DATAACK:
64 		case DCCP_PKT_RESET:
65 			break;
66 
67 		case DCCP_PKT_REQUEST:
68 			set_ack = 0;
69 			/* fall through */
70 
71 		case DCCP_PKT_SYNC:
72 		case DCCP_PKT_SYNCACK:
73 			ackno = dcb->dccpd_ack_seq;
74 			/* fall through */
75 		default:
76 			/*
77 			 * Set owner/destructor: some skbs are allocated via
78 			 * alloc_skb (e.g. when retransmission may happen).
79 			 * Only Data, DataAck, and Reset packets should come
80 			 * through here with skb->sk set.
81 			 */
82 			WARN_ON(skb->sk);
83 			skb_set_owner_w(skb, sk);
84 			break;
85 		}
86 
87 		dcb->dccpd_seq = dp->dccps_gss;
88 
89 		if (dccp_insert_options(sk, skb)) {
90 			kfree_skb(skb);
91 			return -EPROTO;
92 		}
93 
94 
95 		/* Build DCCP header and checksum it. */
96 		dh = dccp_zeroed_hdr(skb, dccp_header_size);
97 		dh->dccph_type	= dcb->dccpd_type;
98 		dh->dccph_sport	= inet->sport;
99 		dh->dccph_dport	= inet->dport;
100 		dh->dccph_doff	= (dccp_header_size + dcb->dccpd_opt_len) / 4;
101 		dh->dccph_ccval	= dcb->dccpd_ccval;
102 		dh->dccph_cscov = dp->dccps_pcslen;
103 		/* XXX For now we're using only 48 bits sequence numbers */
104 		dh->dccph_x	= 1;
105 
106 		dp->dccps_awh = dp->dccps_gss;
107 		dccp_hdr_set_seq(dh, dp->dccps_gss);
108 		if (set_ack)
109 			dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), ackno);
110 
111 		switch (dcb->dccpd_type) {
112 		case DCCP_PKT_REQUEST:
113 			dccp_hdr_request(skb)->dccph_req_service =
114 							dp->dccps_service;
115 			break;
116 		case DCCP_PKT_RESET:
117 			dccp_hdr_reset(skb)->dccph_reset_code =
118 							dcb->dccpd_reset_code;
119 			break;
120 		}
121 
122 		icsk->icsk_af_ops->send_check(sk, 0, skb);
123 
124 		if (set_ack)
125 			dccp_event_ack_sent(sk);
126 
127 		DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
128 
129 		memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
130 		err = icsk->icsk_af_ops->queue_xmit(skb, 0);
131 		return net_xmit_eval(err);
132 	}
133 	return -ENOBUFS;
134 }
135 
136 /**
137  * dccp_determine_ccmps  -  Find out about CCID-specfic packet-size limits
138  * We only consider the HC-sender CCID for setting the CCMPS (RFC 4340, 14.),
139  * since the RX CCID is restricted to feedback packets (Acks), which are small
140  * in comparison with the data traffic. A value of 0 means "no current CCMPS".
141  */
142 static u32 dccp_determine_ccmps(const struct dccp_sock *dp)
143 {
144 	const struct ccid *tx_ccid = dp->dccps_hc_tx_ccid;
145 
146 	if (tx_ccid == NULL || tx_ccid->ccid_ops == NULL)
147 		return 0;
148 	return tx_ccid->ccid_ops->ccid_ccmps;
149 }
150 
151 unsigned int dccp_sync_mss(struct sock *sk, u32 pmtu)
152 {
153 	struct inet_connection_sock *icsk = inet_csk(sk);
154 	struct dccp_sock *dp = dccp_sk(sk);
155 	u32 ccmps = dccp_determine_ccmps(dp);
156 	int cur_mps = ccmps ? min(pmtu, ccmps) : pmtu;
157 
158 	/* Account for header lengths and IPv4/v6 option overhead */
159 	cur_mps -= (icsk->icsk_af_ops->net_header_len + icsk->icsk_ext_hdr_len +
160 		    sizeof(struct dccp_hdr) + sizeof(struct dccp_hdr_ext));
161 
162 	/*
163 	 * FIXME: this should come from the CCID infrastructure, where, say,
164 	 * TFRC will say it wants TIMESTAMPS, ELAPSED time, etc, for now lets
165 	 * put a rough estimate for NDP + TIMESTAMP + TIMESTAMP_ECHO + ELAPSED
166 	 * TIME + TFRC_OPT_LOSS_EVENT_RATE + TFRC_OPT_RECEIVE_RATE + padding to
167 	 * make it a multiple of 4
168 	 */
169 
170 	cur_mps -= ((5 + 6 + 10 + 6 + 6 + 6 + 3) / 4) * 4;
171 
172 	/* And store cached results */
173 	icsk->icsk_pmtu_cookie = pmtu;
174 	dp->dccps_mss_cache = cur_mps;
175 
176 	return cur_mps;
177 }
178 
179 EXPORT_SYMBOL_GPL(dccp_sync_mss);
180 
181 void dccp_write_space(struct sock *sk)
182 {
183 	read_lock(&sk->sk_callback_lock);
184 
185 	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
186 		wake_up_interruptible(sk->sk_sleep);
187 	/* Should agree with poll, otherwise some programs break */
188 	if (sock_writeable(sk))
189 		sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
190 
191 	read_unlock(&sk->sk_callback_lock);
192 }
193 
194 /**
195  * dccp_wait_for_ccid - Wait for ccid to tell us we can send a packet
196  * @sk:    socket to wait for
197  * @skb:   current skb to pass on for waiting
198  * @delay: sleep timeout in milliseconds (> 0)
199  * This function is called by default when the socket is closed, and
200  * when a non-zero linger time is set on the socket. For consistency
201  */
202 static int dccp_wait_for_ccid(struct sock *sk, struct sk_buff *skb, int delay)
203 {
204 	struct dccp_sock *dp = dccp_sk(sk);
205 	DEFINE_WAIT(wait);
206 	unsigned long jiffdelay;
207 	int rc;
208 
209 	do {
210 		dccp_pr_debug("delayed send by %d msec\n", delay);
211 		jiffdelay = msecs_to_jiffies(delay);
212 
213 		prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
214 
215 		sk->sk_write_pending++;
216 		release_sock(sk);
217 		schedule_timeout(jiffdelay);
218 		lock_sock(sk);
219 		sk->sk_write_pending--;
220 
221 		if (sk->sk_err)
222 			goto do_error;
223 		if (signal_pending(current))
224 			goto do_interrupted;
225 
226 		rc = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
227 	} while ((delay = rc) > 0);
228 out:
229 	finish_wait(sk->sk_sleep, &wait);
230 	return rc;
231 
232 do_error:
233 	rc = -EPIPE;
234 	goto out;
235 do_interrupted:
236 	rc = -EINTR;
237 	goto out;
238 }
239 
240 void dccp_write_xmit(struct sock *sk, int block)
241 {
242 	struct dccp_sock *dp = dccp_sk(sk);
243 	struct sk_buff *skb;
244 
245 	while ((skb = skb_peek(&sk->sk_write_queue))) {
246 		int err = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
247 
248 		if (err > 0) {
249 			if (!block) {
250 				sk_reset_timer(sk, &dp->dccps_xmit_timer,
251 						msecs_to_jiffies(err)+jiffies);
252 				break;
253 			} else
254 				err = dccp_wait_for_ccid(sk, skb, err);
255 			if (err && err != -EINTR)
256 				DCCP_BUG("err=%d after dccp_wait_for_ccid", err);
257 		}
258 
259 		skb_dequeue(&sk->sk_write_queue);
260 		if (err == 0) {
261 			struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
262 			const int len = skb->len;
263 
264 			if (sk->sk_state == DCCP_PARTOPEN) {
265 				/* See 8.1.5.  Handshake Completion */
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 				dcb->dccpd_type = DCCP_PKT_DATAACK;
271 			} else if (dccp_ack_pending(sk))
272 				dcb->dccpd_type = DCCP_PKT_DATAACK;
273 			else
274 				dcb->dccpd_type = DCCP_PKT_DATA;
275 
276 			err = dccp_transmit_skb(sk, skb);
277 			ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len);
278 			if (err)
279 				DCCP_BUG("err=%d after ccid_hc_tx_packet_sent",
280 					 err);
281 		} else {
282 			dccp_pr_debug("packet discarded due to err=%d\n", err);
283 			kfree_skb(skb);
284 		}
285 	}
286 }
287 
288 int dccp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
289 {
290 	if (inet_csk(sk)->icsk_af_ops->rebuild_header(sk) != 0)
291 		return -EHOSTUNREACH; /* Routing failure or similar. */
292 
293 	return dccp_transmit_skb(sk, (skb_cloned(skb) ?
294 				      pskb_copy(skb, GFP_ATOMIC):
295 				      skb_clone(skb, GFP_ATOMIC)));
296 }
297 
298 struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
299 				   struct request_sock *req)
300 {
301 	struct dccp_hdr *dh;
302 	struct dccp_request_sock *dreq;
303 	const u32 dccp_header_size = sizeof(struct dccp_hdr) +
304 				     sizeof(struct dccp_hdr_ext) +
305 				     sizeof(struct dccp_hdr_response);
306 	struct sk_buff *skb = sock_wmalloc(sk, sk->sk_prot->max_header, 1,
307 					   GFP_ATOMIC);
308 	if (skb == NULL)
309 		return NULL;
310 
311 	/* Reserve space for headers. */
312 	skb_reserve(skb, sk->sk_prot->max_header);
313 
314 	skb->dst = dst_clone(dst);
315 
316 	dreq = dccp_rsk(req);
317 	if (inet_rsk(req)->acked)	/* increase ISS upon retransmission */
318 		dccp_inc_seqno(&dreq->dreq_iss);
319 	DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_RESPONSE;
320 	DCCP_SKB_CB(skb)->dccpd_seq  = dreq->dreq_iss;
321 
322 	if (dccp_insert_options_rsk(dreq, skb)) {
323 		kfree_skb(skb);
324 		return NULL;
325 	}
326 
327 	/* Build and checksum header */
328 	dh = dccp_zeroed_hdr(skb, dccp_header_size);
329 
330 	dh->dccph_sport	= inet_sk(sk)->sport;
331 	dh->dccph_dport	= inet_rsk(req)->rmt_port;
332 	dh->dccph_doff	= (dccp_header_size +
333 			   DCCP_SKB_CB(skb)->dccpd_opt_len) / 4;
334 	dh->dccph_type	= DCCP_PKT_RESPONSE;
335 	dh->dccph_x	= 1;
336 	dccp_hdr_set_seq(dh, dreq->dreq_iss);
337 	dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), dreq->dreq_isr);
338 	dccp_hdr_response(skb)->dccph_resp_service = dreq->dreq_service;
339 
340 	dccp_csum_outgoing(skb);
341 
342 	/* We use `acked' to remember that a Response was already sent. */
343 	inet_rsk(req)->acked = 1;
344 	DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
345 	return skb;
346 }
347 
348 EXPORT_SYMBOL_GPL(dccp_make_response);
349 
350 /* answer offending packet in @rcv_skb with Reset from control socket @ctl */
351 struct sk_buff *dccp_ctl_make_reset(struct socket *ctl, struct sk_buff *rcv_skb)
352 {
353 	struct dccp_hdr *rxdh = dccp_hdr(rcv_skb), *dh;
354 	struct dccp_skb_cb *dcb = DCCP_SKB_CB(rcv_skb);
355 	const u32 dccp_hdr_reset_len = sizeof(struct dccp_hdr) +
356 				       sizeof(struct dccp_hdr_ext) +
357 				       sizeof(struct dccp_hdr_reset);
358 	struct dccp_hdr_reset *dhr;
359 	struct sk_buff *skb;
360 
361 	skb = alloc_skb(ctl->sk->sk_prot->max_header, GFP_ATOMIC);
362 	if (skb == NULL)
363 		return NULL;
364 
365 	skb_reserve(skb, ctl->sk->sk_prot->max_header);
366 
367 	/* Swap the send and the receive. */
368 	dh = dccp_zeroed_hdr(skb, dccp_hdr_reset_len);
369 	dh->dccph_type	= DCCP_PKT_RESET;
370 	dh->dccph_sport	= rxdh->dccph_dport;
371 	dh->dccph_dport	= rxdh->dccph_sport;
372 	dh->dccph_doff	= dccp_hdr_reset_len / 4;
373 	dh->dccph_x	= 1;
374 
375 	dhr = dccp_hdr_reset(skb);
376 	dhr->dccph_reset_code = dcb->dccpd_reset_code;
377 
378 	switch (dcb->dccpd_reset_code) {
379 	case DCCP_RESET_CODE_PACKET_ERROR:
380 		dhr->dccph_reset_data[0] = rxdh->dccph_type;
381 		break;
382 	case DCCP_RESET_CODE_OPTION_ERROR:	/* fall through */
383 	case DCCP_RESET_CODE_MANDATORY_ERROR:
384 		memcpy(dhr->dccph_reset_data, dcb->dccpd_reset_data, 3);
385 		break;
386 	}
387 	/*
388 	 * From RFC 4340, 8.3.1:
389 	 *   If P.ackno exists, set R.seqno := P.ackno + 1.
390 	 *   Else set R.seqno := 0.
391 	 */
392 	if (dcb->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ)
393 		dccp_hdr_set_seq(dh, ADD48(dcb->dccpd_ack_seq, 1));
394 	dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), dcb->dccpd_seq);
395 
396 	dccp_csum_outgoing(skb);
397 	return skb;
398 }
399 
400 EXPORT_SYMBOL_GPL(dccp_ctl_make_reset);
401 
402 /* send Reset on established socket, to close or abort the connection */
403 int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
404 {
405 	struct sk_buff *skb;
406 	/*
407 	 * FIXME: what if rebuild_header fails?
408 	 * Should we be doing a rebuild_header here?
409 	 */
410 	int err = inet_csk(sk)->icsk_af_ops->rebuild_header(sk);
411 
412 	if (err != 0)
413 		return err;
414 
415 	skb = sock_wmalloc(sk, sk->sk_prot->max_header, 1, GFP_ATOMIC);
416 	if (skb == NULL)
417 		return -ENOBUFS;
418 
419 	/* Reserve space for headers and prepare control bits. */
420 	skb_reserve(skb, sk->sk_prot->max_header);
421 	DCCP_SKB_CB(skb)->dccpd_type	   = DCCP_PKT_RESET;
422 	DCCP_SKB_CB(skb)->dccpd_reset_code = code;
423 
424 	return dccp_transmit_skb(sk, skb);
425 }
426 
427 /*
428  * Do all connect socket setups that can be done AF independent.
429  */
430 static inline void dccp_connect_init(struct sock *sk)
431 {
432 	struct dccp_sock *dp = dccp_sk(sk);
433 	struct dst_entry *dst = __sk_dst_get(sk);
434 	struct inet_connection_sock *icsk = inet_csk(sk);
435 
436 	sk->sk_err = 0;
437 	sock_reset_flag(sk, SOCK_DONE);
438 
439 	dccp_sync_mss(sk, dst_mtu(dst));
440 
441 	/*
442 	 * SWL and AWL are initially adjusted so that they are not less than
443 	 * the initial Sequence Numbers received and sent, respectively:
444 	 *	SWL := max(GSR + 1 - floor(W/4), ISR),
445 	 *	AWL := max(GSS - W' + 1, ISS).
446 	 * These adjustments MUST be applied only at the beginning of the
447 	 * connection.
448 	 */
449 	dccp_update_gss(sk, dp->dccps_iss);
450 	dccp_set_seqno(&dp->dccps_awl, max48(dp->dccps_awl, dp->dccps_iss));
451 
452 	/* S.GAR - greatest valid acknowledgement number received on a non-Sync;
453 	 *         initialized to S.ISS (sec. 8.5)                            */
454 	dp->dccps_gar = dp->dccps_iss;
455 
456 	icsk->icsk_retransmits = 0;
457 }
458 
459 int dccp_connect(struct sock *sk)
460 {
461 	struct sk_buff *skb;
462 	struct inet_connection_sock *icsk = inet_csk(sk);
463 
464 	dccp_connect_init(sk);
465 
466 	skb = alloc_skb(sk->sk_prot->max_header, sk->sk_allocation);
467 	if (unlikely(skb == NULL))
468 		return -ENOBUFS;
469 
470 	/* Reserve space for headers. */
471 	skb_reserve(skb, sk->sk_prot->max_header);
472 
473 	DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_REQUEST;
474 
475 	dccp_skb_entail(sk, skb);
476 	dccp_transmit_skb(sk, skb_clone(skb, GFP_KERNEL));
477 	DCCP_INC_STATS(DCCP_MIB_ACTIVEOPENS);
478 
479 	/* Timer for repeating the REQUEST until an answer. */
480 	inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
481 				  icsk->icsk_rto, DCCP_RTO_MAX);
482 	return 0;
483 }
484 
485 EXPORT_SYMBOL_GPL(dccp_connect);
486 
487 void dccp_send_ack(struct sock *sk)
488 {
489 	/* If we have been reset, we may not send again. */
490 	if (sk->sk_state != DCCP_CLOSED) {
491 		struct sk_buff *skb = alloc_skb(sk->sk_prot->max_header,
492 						GFP_ATOMIC);
493 
494 		if (skb == NULL) {
495 			inet_csk_schedule_ack(sk);
496 			inet_csk(sk)->icsk_ack.ato = TCP_ATO_MIN;
497 			inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
498 						  TCP_DELACK_MAX,
499 						  DCCP_RTO_MAX);
500 			return;
501 		}
502 
503 		/* Reserve space for headers */
504 		skb_reserve(skb, sk->sk_prot->max_header);
505 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_ACK;
506 		dccp_transmit_skb(sk, skb);
507 	}
508 }
509 
510 EXPORT_SYMBOL_GPL(dccp_send_ack);
511 
512 /* FIXME: Is this still necessary (11.3) - currently nowhere used by DCCP. */
513 void dccp_send_delayed_ack(struct sock *sk)
514 {
515 	struct inet_connection_sock *icsk = inet_csk(sk);
516 	/*
517 	 * FIXME: tune this timer. elapsed time fixes the skew, so no problem
518 	 * with using 2s, and active senders also piggyback the ACK into a
519 	 * DATAACK packet, so this is really for quiescent senders.
520 	 */
521 	unsigned long timeout = jiffies + 2 * HZ;
522 
523 	/* Use new timeout only if there wasn't a older one earlier. */
524 	if (icsk->icsk_ack.pending & ICSK_ACK_TIMER) {
525 		/* If delack timer was blocked or is about to expire,
526 		 * send ACK now.
527 		 *
528 		 * FIXME: check the "about to expire" part
529 		 */
530 		if (icsk->icsk_ack.blocked) {
531 			dccp_send_ack(sk);
532 			return;
533 		}
534 
535 		if (!time_before(timeout, icsk->icsk_ack.timeout))
536 			timeout = icsk->icsk_ack.timeout;
537 	}
538 	icsk->icsk_ack.pending |= ICSK_ACK_SCHED | ICSK_ACK_TIMER;
539 	icsk->icsk_ack.timeout = timeout;
540 	sk_reset_timer(sk, &icsk->icsk_delack_timer, timeout);
541 }
542 
543 void dccp_send_sync(struct sock *sk, const u64 ackno,
544 		    const enum dccp_pkt_type pkt_type)
545 {
546 	/*
547 	 * We are not putting this on the write queue, so
548 	 * dccp_transmit_skb() will set the ownership to this
549 	 * sock.
550 	 */
551 	struct sk_buff *skb = alloc_skb(sk->sk_prot->max_header, GFP_ATOMIC);
552 
553 	if (skb == NULL) {
554 		/* FIXME: how to make sure the sync is sent? */
555 		DCCP_CRIT("could not send %s", dccp_packet_name(pkt_type));
556 		return;
557 	}
558 
559 	/* Reserve space for headers and prepare control bits. */
560 	skb_reserve(skb, sk->sk_prot->max_header);
561 	DCCP_SKB_CB(skb)->dccpd_type = pkt_type;
562 	DCCP_SKB_CB(skb)->dccpd_ack_seq = ackno;
563 
564 	dccp_transmit_skb(sk, skb);
565 }
566 
567 EXPORT_SYMBOL_GPL(dccp_send_sync);
568 
569 /*
570  * Send a DCCP_PKT_CLOSE/CLOSEREQ. The caller locks the socket for us. This
571  * cannot be allowed to fail queueing a DCCP_PKT_CLOSE/CLOSEREQ frame under
572  * any circumstances.
573  */
574 void dccp_send_close(struct sock *sk, const int active)
575 {
576 	struct dccp_sock *dp = dccp_sk(sk);
577 	struct sk_buff *skb;
578 	const gfp_t prio = active ? GFP_KERNEL : GFP_ATOMIC;
579 
580 	skb = alloc_skb(sk->sk_prot->max_header, prio);
581 	if (skb == NULL)
582 		return;
583 
584 	/* Reserve space for headers and prepare control bits. */
585 	skb_reserve(skb, sk->sk_prot->max_header);
586 	if (dp->dccps_role == DCCP_ROLE_SERVER && !dp->dccps_server_timewait)
587 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSEREQ;
588 	else
589 		DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSE;
590 
591 	if (active) {
592 		dccp_write_xmit(sk, 1);
593 		dccp_skb_entail(sk, skb);
594 		dccp_transmit_skb(sk, skb_clone(skb, prio));
595 		/*
596 		 * Retransmission timer for active-close: RFC 4340, 8.3 requires
597 		 * to retransmit the Close/CloseReq until the CLOSING/CLOSEREQ
598 		 * state can be left. The initial timeout is 2 RTTs.
599 		 * Since RTT measurement is done by the CCIDs, there is no easy
600 		 * way to get an RTT sample. The fallback RTT from RFC 4340, 3.4
601 		 * is too low (200ms); we use a high value to avoid unnecessary
602 		 * retransmissions when the link RTT is > 0.2 seconds.
603 		 * FIXME: Let main module sample RTTs and use that instead.
604 		 */
605 		inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
606 					  DCCP_TIMEOUT_INIT, DCCP_RTO_MAX);
607 	} else
608 		dccp_transmit_skb(sk, skb);
609 }
610