xref: /linux/net/ipv6/tcp_ipv6.c (revision 14b42963f64b98ab61fa9723c03d71aa5ef4f862)
1 /*
2  *	TCP over IPv6
3  *	Linux INET6 implementation
4  *
5  *	Authors:
6  *	Pedro Roque		<roque@di.fc.ul.pt>
7  *
8  *	$Id: tcp_ipv6.c,v 1.144 2002/02/01 22:01:04 davem Exp $
9  *
10  *	Based on:
11  *	linux/net/ipv4/tcp.c
12  *	linux/net/ipv4/tcp_input.c
13  *	linux/net/ipv4/tcp_output.c
14  *
15  *	Fixes:
16  *	Hideaki YOSHIFUJI	:	sin6_scope_id support
17  *	YOSHIFUJI Hideaki @USAGI and:	Support IPV6_V6ONLY socket option, which
18  *	Alexey Kuznetsov		allow both IPv4 and IPv6 sockets to bind
19  *					a single port at the same time.
20  *	YOSHIFUJI Hideaki @USAGI:	convert /proc/net/tcp6 to seq_file.
21  *
22  *	This program is free software; you can redistribute it and/or
23  *      modify it under the terms of the GNU General Public License
24  *      as published by the Free Software Foundation; either version
25  *      2 of the License, or (at your option) any later version.
26  */
27 
28 #include <linux/module.h>
29 #include <linux/errno.h>
30 #include <linux/types.h>
31 #include <linux/socket.h>
32 #include <linux/sockios.h>
33 #include <linux/net.h>
34 #include <linux/jiffies.h>
35 #include <linux/in.h>
36 #include <linux/in6.h>
37 #include <linux/netdevice.h>
38 #include <linux/init.h>
39 #include <linux/jhash.h>
40 #include <linux/ipsec.h>
41 #include <linux/times.h>
42 
43 #include <linux/ipv6.h>
44 #include <linux/icmpv6.h>
45 #include <linux/random.h>
46 
47 #include <net/tcp.h>
48 #include <net/ndisc.h>
49 #include <net/inet6_hashtables.h>
50 #include <net/inet6_connection_sock.h>
51 #include <net/ipv6.h>
52 #include <net/transp_v6.h>
53 #include <net/addrconf.h>
54 #include <net/ip6_route.h>
55 #include <net/ip6_checksum.h>
56 #include <net/inet_ecn.h>
57 #include <net/protocol.h>
58 #include <net/xfrm.h>
59 #include <net/addrconf.h>
60 #include <net/snmp.h>
61 #include <net/dsfield.h>
62 #include <net/timewait_sock.h>
63 
64 #include <asm/uaccess.h>
65 
66 #include <linux/proc_fs.h>
67 #include <linux/seq_file.h>
68 
69 /* Socket used for sending RSTs and ACKs */
70 static struct socket *tcp6_socket;
71 
72 static void	tcp_v6_send_reset(struct sk_buff *skb);
73 static void	tcp_v6_reqsk_send_ack(struct sk_buff *skb, struct request_sock *req);
74 static void	tcp_v6_send_check(struct sock *sk, int len,
75 				  struct sk_buff *skb);
76 
77 static int	tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
78 
79 static struct inet_connection_sock_af_ops ipv6_mapped;
80 static struct inet_connection_sock_af_ops ipv6_specific;
81 
82 static int tcp_v6_get_port(struct sock *sk, unsigned short snum)
83 {
84 	return inet_csk_get_port(&tcp_hashinfo, sk, snum,
85 				 inet6_csk_bind_conflict);
86 }
87 
88 static void tcp_v6_hash(struct sock *sk)
89 {
90 	if (sk->sk_state != TCP_CLOSE) {
91 		if (inet_csk(sk)->icsk_af_ops == &ipv6_mapped) {
92 			tcp_prot.hash(sk);
93 			return;
94 		}
95 		local_bh_disable();
96 		__inet6_hash(&tcp_hashinfo, sk);
97 		local_bh_enable();
98 	}
99 }
100 
101 static __inline__ u16 tcp_v6_check(struct tcphdr *th, int len,
102 				   struct in6_addr *saddr,
103 				   struct in6_addr *daddr,
104 				   unsigned long base)
105 {
106 	return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base);
107 }
108 
109 static __u32 tcp_v6_init_sequence(struct sock *sk, struct sk_buff *skb)
110 {
111 	if (skb->protocol == htons(ETH_P_IPV6)) {
112 		return secure_tcpv6_sequence_number(skb->nh.ipv6h->daddr.s6_addr32,
113 						    skb->nh.ipv6h->saddr.s6_addr32,
114 						    skb->h.th->dest,
115 						    skb->h.th->source);
116 	} else {
117 		return secure_tcp_sequence_number(skb->nh.iph->daddr,
118 						  skb->nh.iph->saddr,
119 						  skb->h.th->dest,
120 						  skb->h.th->source);
121 	}
122 }
123 
124 static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
125 			  int addr_len)
126 {
127 	struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
128  	struct inet_sock *inet = inet_sk(sk);
129 	struct inet_connection_sock *icsk = inet_csk(sk);
130 	struct ipv6_pinfo *np = inet6_sk(sk);
131 	struct tcp_sock *tp = tcp_sk(sk);
132 	struct in6_addr *saddr = NULL, *final_p = NULL, final;
133 	struct flowi fl;
134 	struct dst_entry *dst;
135 	int addr_type;
136 	int err;
137 
138 	if (addr_len < SIN6_LEN_RFC2133)
139 		return -EINVAL;
140 
141 	if (usin->sin6_family != AF_INET6)
142 		return(-EAFNOSUPPORT);
143 
144 	memset(&fl, 0, sizeof(fl));
145 
146 	if (np->sndflow) {
147 		fl.fl6_flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
148 		IP6_ECN_flow_init(fl.fl6_flowlabel);
149 		if (fl.fl6_flowlabel&IPV6_FLOWLABEL_MASK) {
150 			struct ip6_flowlabel *flowlabel;
151 			flowlabel = fl6_sock_lookup(sk, fl.fl6_flowlabel);
152 			if (flowlabel == NULL)
153 				return -EINVAL;
154 			ipv6_addr_copy(&usin->sin6_addr, &flowlabel->dst);
155 			fl6_sock_release(flowlabel);
156 		}
157 	}
158 
159 	/*
160   	 *	connect() to INADDR_ANY means loopback (BSD'ism).
161   	 */
162 
163   	if(ipv6_addr_any(&usin->sin6_addr))
164 		usin->sin6_addr.s6_addr[15] = 0x1;
165 
166 	addr_type = ipv6_addr_type(&usin->sin6_addr);
167 
168 	if(addr_type & IPV6_ADDR_MULTICAST)
169 		return -ENETUNREACH;
170 
171 	if (addr_type&IPV6_ADDR_LINKLOCAL) {
172 		if (addr_len >= sizeof(struct sockaddr_in6) &&
173 		    usin->sin6_scope_id) {
174 			/* If interface is set while binding, indices
175 			 * must coincide.
176 			 */
177 			if (sk->sk_bound_dev_if &&
178 			    sk->sk_bound_dev_if != usin->sin6_scope_id)
179 				return -EINVAL;
180 
181 			sk->sk_bound_dev_if = usin->sin6_scope_id;
182 		}
183 
184 		/* Connect to link-local address requires an interface */
185 		if (!sk->sk_bound_dev_if)
186 			return -EINVAL;
187 	}
188 
189 	if (tp->rx_opt.ts_recent_stamp &&
190 	    !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) {
191 		tp->rx_opt.ts_recent = 0;
192 		tp->rx_opt.ts_recent_stamp = 0;
193 		tp->write_seq = 0;
194 	}
195 
196 	ipv6_addr_copy(&np->daddr, &usin->sin6_addr);
197 	np->flow_label = fl.fl6_flowlabel;
198 
199 	/*
200 	 *	TCP over IPv4
201 	 */
202 
203 	if (addr_type == IPV6_ADDR_MAPPED) {
204 		u32 exthdrlen = icsk->icsk_ext_hdr_len;
205 		struct sockaddr_in sin;
206 
207 		SOCK_DEBUG(sk, "connect: ipv4 mapped\n");
208 
209 		if (__ipv6_only_sock(sk))
210 			return -ENETUNREACH;
211 
212 		sin.sin_family = AF_INET;
213 		sin.sin_port = usin->sin6_port;
214 		sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3];
215 
216 		icsk->icsk_af_ops = &ipv6_mapped;
217 		sk->sk_backlog_rcv = tcp_v4_do_rcv;
218 
219 		err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
220 
221 		if (err) {
222 			icsk->icsk_ext_hdr_len = exthdrlen;
223 			icsk->icsk_af_ops = &ipv6_specific;
224 			sk->sk_backlog_rcv = tcp_v6_do_rcv;
225 			goto failure;
226 		} else {
227 			ipv6_addr_set(&np->saddr, 0, 0, htonl(0x0000FFFF),
228 				      inet->saddr);
229 			ipv6_addr_set(&np->rcv_saddr, 0, 0, htonl(0x0000FFFF),
230 				      inet->rcv_saddr);
231 		}
232 
233 		return err;
234 	}
235 
236 	if (!ipv6_addr_any(&np->rcv_saddr))
237 		saddr = &np->rcv_saddr;
238 
239 	fl.proto = IPPROTO_TCP;
240 	ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
241 	ipv6_addr_copy(&fl.fl6_src,
242 		       (saddr ? saddr : &np->saddr));
243 	fl.oif = sk->sk_bound_dev_if;
244 	fl.fl_ip_dport = usin->sin6_port;
245 	fl.fl_ip_sport = inet->sport;
246 
247 	if (np->opt && np->opt->srcrt) {
248 		struct rt0_hdr *rt0 = (struct rt0_hdr *)np->opt->srcrt;
249 		ipv6_addr_copy(&final, &fl.fl6_dst);
250 		ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
251 		final_p = &final;
252 	}
253 
254 	err = ip6_dst_lookup(sk, &dst, &fl);
255 	if (err)
256 		goto failure;
257 	if (final_p)
258 		ipv6_addr_copy(&fl.fl6_dst, final_p);
259 
260 	if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0)
261 		goto failure;
262 
263 	if (saddr == NULL) {
264 		saddr = &fl.fl6_src;
265 		ipv6_addr_copy(&np->rcv_saddr, saddr);
266 	}
267 
268 	/* set the source address */
269 	ipv6_addr_copy(&np->saddr, saddr);
270 	inet->rcv_saddr = LOOPBACK4_IPV6;
271 
272 	sk->sk_gso_type = SKB_GSO_TCPV6;
273 	ip6_dst_store(sk, dst, NULL);
274 
275 	icsk->icsk_ext_hdr_len = 0;
276 	if (np->opt)
277 		icsk->icsk_ext_hdr_len = (np->opt->opt_flen +
278 					  np->opt->opt_nflen);
279 
280 	tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
281 
282 	inet->dport = usin->sin6_port;
283 
284 	tcp_set_state(sk, TCP_SYN_SENT);
285 	err = inet6_hash_connect(&tcp_death_row, sk);
286 	if (err)
287 		goto late_failure;
288 
289 	if (!tp->write_seq)
290 		tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
291 							     np->daddr.s6_addr32,
292 							     inet->sport,
293 							     inet->dport);
294 
295 	err = tcp_connect(sk);
296 	if (err)
297 		goto late_failure;
298 
299 	return 0;
300 
301 late_failure:
302 	tcp_set_state(sk, TCP_CLOSE);
303 	__sk_dst_reset(sk);
304 failure:
305 	inet->dport = 0;
306 	sk->sk_route_caps = 0;
307 	return err;
308 }
309 
310 static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
311 		int type, int code, int offset, __u32 info)
312 {
313 	struct ipv6hdr *hdr = (struct ipv6hdr*)skb->data;
314 	const struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
315 	struct ipv6_pinfo *np;
316 	struct sock *sk;
317 	int err;
318 	struct tcp_sock *tp;
319 	__u32 seq;
320 
321 	sk = inet6_lookup(&tcp_hashinfo, &hdr->daddr, th->dest, &hdr->saddr,
322 			  th->source, skb->dev->ifindex);
323 
324 	if (sk == NULL) {
325 		ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
326 		return;
327 	}
328 
329 	if (sk->sk_state == TCP_TIME_WAIT) {
330 		inet_twsk_put((struct inet_timewait_sock *)sk);
331 		return;
332 	}
333 
334 	bh_lock_sock(sk);
335 	if (sock_owned_by_user(sk))
336 		NET_INC_STATS_BH(LINUX_MIB_LOCKDROPPEDICMPS);
337 
338 	if (sk->sk_state == TCP_CLOSE)
339 		goto out;
340 
341 	tp = tcp_sk(sk);
342 	seq = ntohl(th->seq);
343 	if (sk->sk_state != TCP_LISTEN &&
344 	    !between(seq, tp->snd_una, tp->snd_nxt)) {
345 		NET_INC_STATS_BH(LINUX_MIB_OUTOFWINDOWICMPS);
346 		goto out;
347 	}
348 
349 	np = inet6_sk(sk);
350 
351 	if (type == ICMPV6_PKT_TOOBIG) {
352 		struct dst_entry *dst = NULL;
353 
354 		if (sock_owned_by_user(sk))
355 			goto out;
356 		if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
357 			goto out;
358 
359 		/* icmp should have updated the destination cache entry */
360 		dst = __sk_dst_check(sk, np->dst_cookie);
361 
362 		if (dst == NULL) {
363 			struct inet_sock *inet = inet_sk(sk);
364 			struct flowi fl;
365 
366 			/* BUGGG_FUTURE: Again, it is not clear how
367 			   to handle rthdr case. Ignore this complexity
368 			   for now.
369 			 */
370 			memset(&fl, 0, sizeof(fl));
371 			fl.proto = IPPROTO_TCP;
372 			ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
373 			ipv6_addr_copy(&fl.fl6_src, &np->saddr);
374 			fl.oif = sk->sk_bound_dev_if;
375 			fl.fl_ip_dport = inet->dport;
376 			fl.fl_ip_sport = inet->sport;
377 
378 			if ((err = ip6_dst_lookup(sk, &dst, &fl))) {
379 				sk->sk_err_soft = -err;
380 				goto out;
381 			}
382 
383 			if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) {
384 				sk->sk_err_soft = -err;
385 				goto out;
386 			}
387 
388 		} else
389 			dst_hold(dst);
390 
391 		if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) {
392 			tcp_sync_mss(sk, dst_mtu(dst));
393 			tcp_simple_retransmit(sk);
394 		} /* else let the usual retransmit timer handle it */
395 		dst_release(dst);
396 		goto out;
397 	}
398 
399 	icmpv6_err_convert(type, code, &err);
400 
401 	/* Might be for an request_sock */
402 	switch (sk->sk_state) {
403 		struct request_sock *req, **prev;
404 	case TCP_LISTEN:
405 		if (sock_owned_by_user(sk))
406 			goto out;
407 
408 		req = inet6_csk_search_req(sk, &prev, th->dest, &hdr->daddr,
409 					   &hdr->saddr, inet6_iif(skb));
410 		if (!req)
411 			goto out;
412 
413 		/* ICMPs are not backlogged, hence we cannot get
414 		 * an established socket here.
415 		 */
416 		BUG_TRAP(req->sk == NULL);
417 
418 		if (seq != tcp_rsk(req)->snt_isn) {
419 			NET_INC_STATS_BH(LINUX_MIB_OUTOFWINDOWICMPS);
420 			goto out;
421 		}
422 
423 		inet_csk_reqsk_queue_drop(sk, req, prev);
424 		goto out;
425 
426 	case TCP_SYN_SENT:
427 	case TCP_SYN_RECV:  /* Cannot happen.
428 			       It can, it SYNs are crossed. --ANK */
429 		if (!sock_owned_by_user(sk)) {
430 			TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
431 			sk->sk_err = err;
432 			sk->sk_error_report(sk);		/* Wake people up to see the error (see connect in sock.c) */
433 
434 			tcp_done(sk);
435 		} else
436 			sk->sk_err_soft = err;
437 		goto out;
438 	}
439 
440 	if (!sock_owned_by_user(sk) && np->recverr) {
441 		sk->sk_err = err;
442 		sk->sk_error_report(sk);
443 	} else
444 		sk->sk_err_soft = err;
445 
446 out:
447 	bh_unlock_sock(sk);
448 	sock_put(sk);
449 }
450 
451 
452 static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
453 			      struct dst_entry *dst)
454 {
455 	struct inet6_request_sock *treq = inet6_rsk(req);
456 	struct ipv6_pinfo *np = inet6_sk(sk);
457 	struct sk_buff * skb;
458 	struct ipv6_txoptions *opt = NULL;
459 	struct in6_addr * final_p = NULL, final;
460 	struct flowi fl;
461 	int err = -1;
462 
463 	memset(&fl, 0, sizeof(fl));
464 	fl.proto = IPPROTO_TCP;
465 	ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
466 	ipv6_addr_copy(&fl.fl6_src, &treq->loc_addr);
467 	fl.fl6_flowlabel = 0;
468 	fl.oif = treq->iif;
469 	fl.fl_ip_dport = inet_rsk(req)->rmt_port;
470 	fl.fl_ip_sport = inet_sk(sk)->sport;
471 
472 	if (dst == NULL) {
473 		opt = np->opt;
474 		if (opt == NULL &&
475 		    np->rxopt.bits.osrcrt == 2 &&
476 		    treq->pktopts) {
477 			struct sk_buff *pktopts = treq->pktopts;
478 			struct inet6_skb_parm *rxopt = IP6CB(pktopts);
479 			if (rxopt->srcrt)
480 				opt = ipv6_invert_rthdr(sk, (struct ipv6_rt_hdr*)(pktopts->nh.raw + rxopt->srcrt));
481 		}
482 
483 		if (opt && opt->srcrt) {
484 			struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
485 			ipv6_addr_copy(&final, &fl.fl6_dst);
486 			ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
487 			final_p = &final;
488 		}
489 
490 		err = ip6_dst_lookup(sk, &dst, &fl);
491 		if (err)
492 			goto done;
493 		if (final_p)
494 			ipv6_addr_copy(&fl.fl6_dst, final_p);
495 		if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0)
496 			goto done;
497 	}
498 
499 	skb = tcp_make_synack(sk, dst, req);
500 	if (skb) {
501 		struct tcphdr *th = skb->h.th;
502 
503 		th->check = tcp_v6_check(th, skb->len,
504 					 &treq->loc_addr, &treq->rmt_addr,
505 					 csum_partial((char *)th, skb->len, skb->csum));
506 
507 		ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
508 		err = ip6_xmit(sk, skb, &fl, opt, 0);
509 		if (err == NET_XMIT_CN)
510 			err = 0;
511 	}
512 
513 done:
514         if (opt && opt != np->opt)
515 		sock_kfree_s(sk, opt, opt->tot_len);
516 	dst_release(dst);
517 	return err;
518 }
519 
520 static void tcp_v6_reqsk_destructor(struct request_sock *req)
521 {
522 	if (inet6_rsk(req)->pktopts)
523 		kfree_skb(inet6_rsk(req)->pktopts);
524 }
525 
526 static struct request_sock_ops tcp6_request_sock_ops = {
527 	.family		=	AF_INET6,
528 	.obj_size	=	sizeof(struct tcp6_request_sock),
529 	.rtx_syn_ack	=	tcp_v6_send_synack,
530 	.send_ack	=	tcp_v6_reqsk_send_ack,
531 	.destructor	=	tcp_v6_reqsk_destructor,
532 	.send_reset	=	tcp_v6_send_reset
533 };
534 
535 static struct timewait_sock_ops tcp6_timewait_sock_ops = {
536 	.twsk_obj_size	= sizeof(struct tcp6_timewait_sock),
537 	.twsk_unique	= tcp_twsk_unique,
538 };
539 
540 static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb)
541 {
542 	struct ipv6_pinfo *np = inet6_sk(sk);
543 	struct tcphdr *th = skb->h.th;
544 
545 	if (skb->ip_summed == CHECKSUM_HW) {
546 		th->check = ~csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,  0);
547 		skb->csum = offsetof(struct tcphdr, check);
548 	} else {
549 		th->check = csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,
550 					    csum_partial((char *)th, th->doff<<2,
551 							 skb->csum));
552 	}
553 }
554 
555 static int tcp_v6_gso_send_check(struct sk_buff *skb)
556 {
557 	struct ipv6hdr *ipv6h;
558 	struct tcphdr *th;
559 
560 	if (!pskb_may_pull(skb, sizeof(*th)))
561 		return -EINVAL;
562 
563 	ipv6h = skb->nh.ipv6h;
564 	th = skb->h.th;
565 
566 	th->check = 0;
567 	th->check = ~csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len,
568 				     IPPROTO_TCP, 0);
569 	skb->csum = offsetof(struct tcphdr, check);
570 	skb->ip_summed = CHECKSUM_HW;
571 	return 0;
572 }
573 
574 static void tcp_v6_send_reset(struct sk_buff *skb)
575 {
576 	struct tcphdr *th = skb->h.th, *t1;
577 	struct sk_buff *buff;
578 	struct flowi fl;
579 
580 	if (th->rst)
581 		return;
582 
583 	if (!ipv6_unicast_destination(skb))
584 		return;
585 
586 	/*
587 	 * We need to grab some memory, and put together an RST,
588 	 * and then put it into the queue to be sent.
589 	 */
590 
591 	buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + sizeof(struct tcphdr),
592 			 GFP_ATOMIC);
593 	if (buff == NULL)
594 	  	return;
595 
596 	skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + sizeof(struct tcphdr));
597 
598 	t1 = (struct tcphdr *) skb_push(buff,sizeof(struct tcphdr));
599 
600 	/* Swap the send and the receive. */
601 	memset(t1, 0, sizeof(*t1));
602 	t1->dest = th->source;
603 	t1->source = th->dest;
604 	t1->doff = sizeof(*t1)/4;
605 	t1->rst = 1;
606 
607 	if(th->ack) {
608 	  	t1->seq = th->ack_seq;
609 	} else {
610 		t1->ack = 1;
611 		t1->ack_seq = htonl(ntohl(th->seq) + th->syn + th->fin
612 				    + skb->len - (th->doff<<2));
613 	}
614 
615 	buff->csum = csum_partial((char *)t1, sizeof(*t1), 0);
616 
617 	memset(&fl, 0, sizeof(fl));
618 	ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);
619 	ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr);
620 
621 	t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
622 				    sizeof(*t1), IPPROTO_TCP,
623 				    buff->csum);
624 
625 	fl.proto = IPPROTO_TCP;
626 	fl.oif = inet6_iif(skb);
627 	fl.fl_ip_dport = t1->dest;
628 	fl.fl_ip_sport = t1->source;
629 
630 	/* sk = NULL, but it is safe for now. RST socket required. */
631 	if (!ip6_dst_lookup(NULL, &buff->dst, &fl)) {
632 
633 		if (xfrm_lookup(&buff->dst, &fl, NULL, 0) >= 0) {
634 			ip6_xmit(tcp6_socket->sk, buff, &fl, NULL, 0);
635 			TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);
636 			TCP_INC_STATS_BH(TCP_MIB_OUTRSTS);
637 			return;
638 		}
639 	}
640 
641 	kfree_skb(buff);
642 }
643 
644 static void tcp_v6_send_ack(struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 ts)
645 {
646 	struct tcphdr *th = skb->h.th, *t1;
647 	struct sk_buff *buff;
648 	struct flowi fl;
649 	int tot_len = sizeof(struct tcphdr);
650 
651 	if (ts)
652 		tot_len += 3*4;
653 
654 	buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
655 			 GFP_ATOMIC);
656 	if (buff == NULL)
657 		return;
658 
659 	skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
660 
661 	t1 = (struct tcphdr *) skb_push(buff,tot_len);
662 
663 	/* Swap the send and the receive. */
664 	memset(t1, 0, sizeof(*t1));
665 	t1->dest = th->source;
666 	t1->source = th->dest;
667 	t1->doff = tot_len/4;
668 	t1->seq = htonl(seq);
669 	t1->ack_seq = htonl(ack);
670 	t1->ack = 1;
671 	t1->window = htons(win);
672 
673 	if (ts) {
674 		u32 *ptr = (u32*)(t1 + 1);
675 		*ptr++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
676 			       (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
677 		*ptr++ = htonl(tcp_time_stamp);
678 		*ptr = htonl(ts);
679 	}
680 
681 	buff->csum = csum_partial((char *)t1, tot_len, 0);
682 
683 	memset(&fl, 0, sizeof(fl));
684 	ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);
685 	ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr);
686 
687 	t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
688 				    tot_len, IPPROTO_TCP,
689 				    buff->csum);
690 
691 	fl.proto = IPPROTO_TCP;
692 	fl.oif = inet6_iif(skb);
693 	fl.fl_ip_dport = t1->dest;
694 	fl.fl_ip_sport = t1->source;
695 
696 	if (!ip6_dst_lookup(NULL, &buff->dst, &fl)) {
697 		if (xfrm_lookup(&buff->dst, &fl, NULL, 0) >= 0) {
698 			ip6_xmit(tcp6_socket->sk, buff, &fl, NULL, 0);
699 			TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);
700 			return;
701 		}
702 	}
703 
704 	kfree_skb(buff);
705 }
706 
707 static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
708 {
709 	struct inet_timewait_sock *tw = inet_twsk(sk);
710 	const struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
711 
712 	tcp_v6_send_ack(skb, tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt,
713 			tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
714 			tcptw->tw_ts_recent);
715 
716 	inet_twsk_put(tw);
717 }
718 
719 static void tcp_v6_reqsk_send_ack(struct sk_buff *skb, struct request_sock *req)
720 {
721 	tcp_v6_send_ack(skb, tcp_rsk(req)->snt_isn + 1, tcp_rsk(req)->rcv_isn + 1, req->rcv_wnd, req->ts_recent);
722 }
723 
724 
725 static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)
726 {
727 	struct request_sock *req, **prev;
728 	const struct tcphdr *th = skb->h.th;
729 	struct sock *nsk;
730 
731 	/* Find possible connection requests. */
732 	req = inet6_csk_search_req(sk, &prev, th->source,
733 				   &skb->nh.ipv6h->saddr,
734 				   &skb->nh.ipv6h->daddr, inet6_iif(skb));
735 	if (req)
736 		return tcp_check_req(sk, skb, req, prev);
737 
738 	nsk = __inet6_lookup_established(&tcp_hashinfo, &skb->nh.ipv6h->saddr,
739 					 th->source, &skb->nh.ipv6h->daddr,
740 					 ntohs(th->dest), inet6_iif(skb));
741 
742 	if (nsk) {
743 		if (nsk->sk_state != TCP_TIME_WAIT) {
744 			bh_lock_sock(nsk);
745 			return nsk;
746 		}
747 		inet_twsk_put((struct inet_timewait_sock *)nsk);
748 		return NULL;
749 	}
750 
751 #if 0 /*def CONFIG_SYN_COOKIES*/
752 	if (!th->rst && !th->syn && th->ack)
753 		sk = cookie_v6_check(sk, skb, &(IPCB(skb)->opt));
754 #endif
755 	return sk;
756 }
757 
758 /* FIXME: this is substantially similar to the ipv4 code.
759  * Can some kind of merge be done? -- erics
760  */
761 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
762 {
763 	struct inet6_request_sock *treq;
764 	struct ipv6_pinfo *np = inet6_sk(sk);
765 	struct tcp_options_received tmp_opt;
766 	struct tcp_sock *tp = tcp_sk(sk);
767 	struct request_sock *req = NULL;
768 	__u32 isn = TCP_SKB_CB(skb)->when;
769 
770 	if (skb->protocol == htons(ETH_P_IP))
771 		return tcp_v4_conn_request(sk, skb);
772 
773 	if (!ipv6_unicast_destination(skb))
774 		goto drop;
775 
776 	/*
777 	 *	There are no SYN attacks on IPv6, yet...
778 	 */
779 	if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
780 		if (net_ratelimit())
781 			printk(KERN_INFO "TCPv6: dropping request, synflood is possible\n");
782 		goto drop;
783 	}
784 
785 	if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
786 		goto drop;
787 
788 	req = inet6_reqsk_alloc(&tcp6_request_sock_ops);
789 	if (req == NULL)
790 		goto drop;
791 
792 	tcp_clear_options(&tmp_opt);
793 	tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
794 	tmp_opt.user_mss = tp->rx_opt.user_mss;
795 
796 	tcp_parse_options(skb, &tmp_opt, 0);
797 
798 	tmp_opt.tstamp_ok = tmp_opt.saw_tstamp;
799 	tcp_openreq_init(req, &tmp_opt, skb);
800 
801 	treq = inet6_rsk(req);
802 	ipv6_addr_copy(&treq->rmt_addr, &skb->nh.ipv6h->saddr);
803 	ipv6_addr_copy(&treq->loc_addr, &skb->nh.ipv6h->daddr);
804 	TCP_ECN_create_request(req, skb->h.th);
805 	treq->pktopts = NULL;
806 	if (ipv6_opt_accepted(sk, skb) ||
807 	    np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
808 	    np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
809 		atomic_inc(&skb->users);
810 		treq->pktopts = skb;
811 	}
812 	treq->iif = sk->sk_bound_dev_if;
813 
814 	/* So that link locals have meaning */
815 	if (!sk->sk_bound_dev_if &&
816 	    ipv6_addr_type(&treq->rmt_addr) & IPV6_ADDR_LINKLOCAL)
817 		treq->iif = inet6_iif(skb);
818 
819 	if (isn == 0)
820 		isn = tcp_v6_init_sequence(sk,skb);
821 
822 	tcp_rsk(req)->snt_isn = isn;
823 
824 	if (tcp_v6_send_synack(sk, req, NULL))
825 		goto drop;
826 
827 	inet6_csk_reqsk_queue_hash_add(sk, req, TCP_TIMEOUT_INIT);
828 	return 0;
829 
830 drop:
831 	if (req)
832 		reqsk_free(req);
833 
834 	TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
835 	return 0; /* don't send reset */
836 }
837 
838 static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
839 					  struct request_sock *req,
840 					  struct dst_entry *dst)
841 {
842 	struct inet6_request_sock *treq = inet6_rsk(req);
843 	struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
844 	struct tcp6_sock *newtcp6sk;
845 	struct inet_sock *newinet;
846 	struct tcp_sock *newtp;
847 	struct sock *newsk;
848 	struct ipv6_txoptions *opt;
849 
850 	if (skb->protocol == htons(ETH_P_IP)) {
851 		/*
852 		 *	v6 mapped
853 		 */
854 
855 		newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst);
856 
857 		if (newsk == NULL)
858 			return NULL;
859 
860 		newtcp6sk = (struct tcp6_sock *)newsk;
861 		inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
862 
863 		newinet = inet_sk(newsk);
864 		newnp = inet6_sk(newsk);
865 		newtp = tcp_sk(newsk);
866 
867 		memcpy(newnp, np, sizeof(struct ipv6_pinfo));
868 
869 		ipv6_addr_set(&newnp->daddr, 0, 0, htonl(0x0000FFFF),
870 			      newinet->daddr);
871 
872 		ipv6_addr_set(&newnp->saddr, 0, 0, htonl(0x0000FFFF),
873 			      newinet->saddr);
874 
875 		ipv6_addr_copy(&newnp->rcv_saddr, &newnp->saddr);
876 
877 		inet_csk(newsk)->icsk_af_ops = &ipv6_mapped;
878 		newsk->sk_backlog_rcv = tcp_v4_do_rcv;
879 		newnp->pktoptions  = NULL;
880 		newnp->opt	   = NULL;
881 		newnp->mcast_oif   = inet6_iif(skb);
882 		newnp->mcast_hops  = skb->nh.ipv6h->hop_limit;
883 
884 		/*
885 		 * No need to charge this sock to the relevant IPv6 refcnt debug socks count
886 		 * here, tcp_create_openreq_child now does this for us, see the comment in
887 		 * that function for the gory details. -acme
888 		 */
889 
890 		/* It is tricky place. Until this moment IPv4 tcp
891 		   worked with IPv6 icsk.icsk_af_ops.
892 		   Sync it now.
893 		 */
894 		tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie);
895 
896 		return newsk;
897 	}
898 
899 	opt = np->opt;
900 
901 	if (sk_acceptq_is_full(sk))
902 		goto out_overflow;
903 
904 	if (np->rxopt.bits.osrcrt == 2 &&
905 	    opt == NULL && treq->pktopts) {
906 		struct inet6_skb_parm *rxopt = IP6CB(treq->pktopts);
907 		if (rxopt->srcrt)
908 			opt = ipv6_invert_rthdr(sk, (struct ipv6_rt_hdr *)(treq->pktopts->nh.raw + rxopt->srcrt));
909 	}
910 
911 	if (dst == NULL) {
912 		struct in6_addr *final_p = NULL, final;
913 		struct flowi fl;
914 
915 		memset(&fl, 0, sizeof(fl));
916 		fl.proto = IPPROTO_TCP;
917 		ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
918 		if (opt && opt->srcrt) {
919 			struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
920 			ipv6_addr_copy(&final, &fl.fl6_dst);
921 			ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
922 			final_p = &final;
923 		}
924 		ipv6_addr_copy(&fl.fl6_src, &treq->loc_addr);
925 		fl.oif = sk->sk_bound_dev_if;
926 		fl.fl_ip_dport = inet_rsk(req)->rmt_port;
927 		fl.fl_ip_sport = inet_sk(sk)->sport;
928 
929 		if (ip6_dst_lookup(sk, &dst, &fl))
930 			goto out;
931 
932 		if (final_p)
933 			ipv6_addr_copy(&fl.fl6_dst, final_p);
934 
935 		if ((xfrm_lookup(&dst, &fl, sk, 0)) < 0)
936 			goto out;
937 	}
938 
939 	newsk = tcp_create_openreq_child(sk, req, skb);
940 	if (newsk == NULL)
941 		goto out;
942 
943 	/*
944 	 * No need to charge this sock to the relevant IPv6 refcnt debug socks
945 	 * count here, tcp_create_openreq_child now does this for us, see the
946 	 * comment in that function for the gory details. -acme
947 	 */
948 
949 	sk->sk_gso_type = SKB_GSO_TCPV6;
950 	ip6_dst_store(newsk, dst, NULL);
951 
952 	newtcp6sk = (struct tcp6_sock *)newsk;
953 	inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
954 
955 	newtp = tcp_sk(newsk);
956 	newinet = inet_sk(newsk);
957 	newnp = inet6_sk(newsk);
958 
959 	memcpy(newnp, np, sizeof(struct ipv6_pinfo));
960 
961 	ipv6_addr_copy(&newnp->daddr, &treq->rmt_addr);
962 	ipv6_addr_copy(&newnp->saddr, &treq->loc_addr);
963 	ipv6_addr_copy(&newnp->rcv_saddr, &treq->loc_addr);
964 	newsk->sk_bound_dev_if = treq->iif;
965 
966 	/* Now IPv6 options...
967 
968 	   First: no IPv4 options.
969 	 */
970 	newinet->opt = NULL;
971 
972 	/* Clone RX bits */
973 	newnp->rxopt.all = np->rxopt.all;
974 
975 	/* Clone pktoptions received with SYN */
976 	newnp->pktoptions = NULL;
977 	if (treq->pktopts != NULL) {
978 		newnp->pktoptions = skb_clone(treq->pktopts, GFP_ATOMIC);
979 		kfree_skb(treq->pktopts);
980 		treq->pktopts = NULL;
981 		if (newnp->pktoptions)
982 			skb_set_owner_r(newnp->pktoptions, newsk);
983 	}
984 	newnp->opt	  = NULL;
985 	newnp->mcast_oif  = inet6_iif(skb);
986 	newnp->mcast_hops = skb->nh.ipv6h->hop_limit;
987 
988 	/* Clone native IPv6 options from listening socket (if any)
989 
990 	   Yes, keeping reference count would be much more clever,
991 	   but we make one more one thing there: reattach optmem
992 	   to newsk.
993 	 */
994 	if (opt) {
995 		newnp->opt = ipv6_dup_options(newsk, opt);
996 		if (opt != np->opt)
997 			sock_kfree_s(sk, opt, opt->tot_len);
998 	}
999 
1000 	inet_csk(newsk)->icsk_ext_hdr_len = 0;
1001 	if (newnp->opt)
1002 		inet_csk(newsk)->icsk_ext_hdr_len = (newnp->opt->opt_nflen +
1003 						     newnp->opt->opt_flen);
1004 
1005 	tcp_mtup_init(newsk);
1006 	tcp_sync_mss(newsk, dst_mtu(dst));
1007 	newtp->advmss = dst_metric(dst, RTAX_ADVMSS);
1008 	tcp_initialize_rcv_mss(newsk);
1009 
1010 	newinet->daddr = newinet->saddr = newinet->rcv_saddr = LOOPBACK4_IPV6;
1011 
1012 	__inet6_hash(&tcp_hashinfo, newsk);
1013 	inet_inherit_port(&tcp_hashinfo, sk, newsk);
1014 
1015 	return newsk;
1016 
1017 out_overflow:
1018 	NET_INC_STATS_BH(LINUX_MIB_LISTENOVERFLOWS);
1019 out:
1020 	NET_INC_STATS_BH(LINUX_MIB_LISTENDROPS);
1021 	if (opt && opt != np->opt)
1022 		sock_kfree_s(sk, opt, opt->tot_len);
1023 	dst_release(dst);
1024 	return NULL;
1025 }
1026 
1027 static int tcp_v6_checksum_init(struct sk_buff *skb)
1028 {
1029 	if (skb->ip_summed == CHECKSUM_HW) {
1030 		if (!tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
1031 				  &skb->nh.ipv6h->daddr,skb->csum)) {
1032 			skb->ip_summed = CHECKSUM_UNNECESSARY;
1033 			return 0;
1034 		}
1035 	}
1036 
1037 	skb->csum = ~tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
1038 				  &skb->nh.ipv6h->daddr, 0);
1039 
1040 	if (skb->len <= 76) {
1041 		return __skb_checksum_complete(skb);
1042 	}
1043 	return 0;
1044 }
1045 
1046 /* The socket must have it's spinlock held when we get
1047  * here.
1048  *
1049  * We have a potential double-lock case here, so even when
1050  * doing backlog processing we use the BH locking scheme.
1051  * This is because we cannot sleep with the original spinlock
1052  * held.
1053  */
1054 static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1055 {
1056 	struct ipv6_pinfo *np = inet6_sk(sk);
1057 	struct tcp_sock *tp;
1058 	struct sk_buff *opt_skb = NULL;
1059 
1060 	/* Imagine: socket is IPv6. IPv4 packet arrives,
1061 	   goes to IPv4 receive handler and backlogged.
1062 	   From backlog it always goes here. Kerboom...
1063 	   Fortunately, tcp_rcv_established and rcv_established
1064 	   handle them correctly, but it is not case with
1065 	   tcp_v6_hnd_req and tcp_v6_send_reset().   --ANK
1066 	 */
1067 
1068 	if (skb->protocol == htons(ETH_P_IP))
1069 		return tcp_v4_do_rcv(sk, skb);
1070 
1071 	if (sk_filter(sk, skb, 0))
1072 		goto discard;
1073 
1074 	/*
1075 	 *	socket locking is here for SMP purposes as backlog rcv
1076 	 *	is currently called with bh processing disabled.
1077 	 */
1078 
1079 	/* Do Stevens' IPV6_PKTOPTIONS.
1080 
1081 	   Yes, guys, it is the only place in our code, where we
1082 	   may make it not affecting IPv4.
1083 	   The rest of code is protocol independent,
1084 	   and I do not like idea to uglify IPv4.
1085 
1086 	   Actually, all the idea behind IPV6_PKTOPTIONS
1087 	   looks not very well thought. For now we latch
1088 	   options, received in the last packet, enqueued
1089 	   by tcp. Feel free to propose better solution.
1090 	                                       --ANK (980728)
1091 	 */
1092 	if (np->rxopt.all)
1093 		opt_skb = skb_clone(skb, GFP_ATOMIC);
1094 
1095 	if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1096 		TCP_CHECK_TIMER(sk);
1097 		if (tcp_rcv_established(sk, skb, skb->h.th, skb->len))
1098 			goto reset;
1099 		TCP_CHECK_TIMER(sk);
1100 		if (opt_skb)
1101 			goto ipv6_pktoptions;
1102 		return 0;
1103 	}
1104 
1105 	if (skb->len < (skb->h.th->doff<<2) || tcp_checksum_complete(skb))
1106 		goto csum_err;
1107 
1108 	if (sk->sk_state == TCP_LISTEN) {
1109 		struct sock *nsk = tcp_v6_hnd_req(sk, skb);
1110 		if (!nsk)
1111 			goto discard;
1112 
1113 		/*
1114 		 * Queue it on the new socket if the new socket is active,
1115 		 * otherwise we just shortcircuit this and continue with
1116 		 * the new socket..
1117 		 */
1118  		if(nsk != sk) {
1119 			if (tcp_child_process(sk, nsk, skb))
1120 				goto reset;
1121 			if (opt_skb)
1122 				__kfree_skb(opt_skb);
1123 			return 0;
1124 		}
1125 	}
1126 
1127 	TCP_CHECK_TIMER(sk);
1128 	if (tcp_rcv_state_process(sk, skb, skb->h.th, skb->len))
1129 		goto reset;
1130 	TCP_CHECK_TIMER(sk);
1131 	if (opt_skb)
1132 		goto ipv6_pktoptions;
1133 	return 0;
1134 
1135 reset:
1136 	tcp_v6_send_reset(skb);
1137 discard:
1138 	if (opt_skb)
1139 		__kfree_skb(opt_skb);
1140 	kfree_skb(skb);
1141 	return 0;
1142 csum_err:
1143 	TCP_INC_STATS_BH(TCP_MIB_INERRS);
1144 	goto discard;
1145 
1146 
1147 ipv6_pktoptions:
1148 	/* Do you ask, what is it?
1149 
1150 	   1. skb was enqueued by tcp.
1151 	   2. skb is added to tail of read queue, rather than out of order.
1152 	   3. socket is not in passive state.
1153 	   4. Finally, it really contains options, which user wants to receive.
1154 	 */
1155 	tp = tcp_sk(sk);
1156 	if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1157 	    !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1158 		if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
1159 			np->mcast_oif = inet6_iif(opt_skb);
1160 		if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
1161 			np->mcast_hops = opt_skb->nh.ipv6h->hop_limit;
1162 		if (ipv6_opt_accepted(sk, opt_skb)) {
1163 			skb_set_owner_r(opt_skb, sk);
1164 			opt_skb = xchg(&np->pktoptions, opt_skb);
1165 		} else {
1166 			__kfree_skb(opt_skb);
1167 			opt_skb = xchg(&np->pktoptions, NULL);
1168 		}
1169 	}
1170 
1171 	if (opt_skb)
1172 		kfree_skb(opt_skb);
1173 	return 0;
1174 }
1175 
1176 static int tcp_v6_rcv(struct sk_buff **pskb)
1177 {
1178 	struct sk_buff *skb = *pskb;
1179 	struct tcphdr *th;
1180 	struct sock *sk;
1181 	int ret;
1182 
1183 	if (skb->pkt_type != PACKET_HOST)
1184 		goto discard_it;
1185 
1186 	/*
1187 	 *	Count it even if it's bad.
1188 	 */
1189 	TCP_INC_STATS_BH(TCP_MIB_INSEGS);
1190 
1191 	if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1192 		goto discard_it;
1193 
1194 	th = skb->h.th;
1195 
1196 	if (th->doff < sizeof(struct tcphdr)/4)
1197 		goto bad_packet;
1198 	if (!pskb_may_pull(skb, th->doff*4))
1199 		goto discard_it;
1200 
1201 	if ((skb->ip_summed != CHECKSUM_UNNECESSARY &&
1202 	     tcp_v6_checksum_init(skb)))
1203 		goto bad_packet;
1204 
1205 	th = skb->h.th;
1206 	TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1207 	TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1208 				    skb->len - th->doff*4);
1209 	TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1210 	TCP_SKB_CB(skb)->when = 0;
1211 	TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(skb->nh.ipv6h);
1212 	TCP_SKB_CB(skb)->sacked = 0;
1213 
1214 	sk = __inet6_lookup(&tcp_hashinfo, &skb->nh.ipv6h->saddr, th->source,
1215 			    &skb->nh.ipv6h->daddr, ntohs(th->dest),
1216 			    inet6_iif(skb));
1217 
1218 	if (!sk)
1219 		goto no_tcp_socket;
1220 
1221 process:
1222 	if (sk->sk_state == TCP_TIME_WAIT)
1223 		goto do_time_wait;
1224 
1225 	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1226 		goto discard_and_relse;
1227 
1228 	if (sk_filter(sk, skb, 0))
1229 		goto discard_and_relse;
1230 
1231 	skb->dev = NULL;
1232 
1233 	bh_lock_sock(sk);
1234 	ret = 0;
1235 	if (!sock_owned_by_user(sk)) {
1236 #ifdef CONFIG_NET_DMA
1237                 struct tcp_sock *tp = tcp_sk(sk);
1238                 if (tp->ucopy.dma_chan)
1239                         ret = tcp_v6_do_rcv(sk, skb);
1240                 else
1241 #endif
1242 		{
1243 			if (!tcp_prequeue(sk, skb))
1244 				ret = tcp_v6_do_rcv(sk, skb);
1245 		}
1246 	} else
1247 		sk_add_backlog(sk, skb);
1248 	bh_unlock_sock(sk);
1249 
1250 	sock_put(sk);
1251 	return ret ? -1 : 0;
1252 
1253 no_tcp_socket:
1254 	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1255 		goto discard_it;
1256 
1257 	if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1258 bad_packet:
1259 		TCP_INC_STATS_BH(TCP_MIB_INERRS);
1260 	} else {
1261 		tcp_v6_send_reset(skb);
1262 	}
1263 
1264 discard_it:
1265 
1266 	/*
1267 	 *	Discard frame
1268 	 */
1269 
1270 	kfree_skb(skb);
1271 	return 0;
1272 
1273 discard_and_relse:
1274 	sock_put(sk);
1275 	goto discard_it;
1276 
1277 do_time_wait:
1278 	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1279 		inet_twsk_put((struct inet_timewait_sock *)sk);
1280 		goto discard_it;
1281 	}
1282 
1283 	if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1284 		TCP_INC_STATS_BH(TCP_MIB_INERRS);
1285 		inet_twsk_put((struct inet_timewait_sock *)sk);
1286 		goto discard_it;
1287 	}
1288 
1289 	switch (tcp_timewait_state_process((struct inet_timewait_sock *)sk,
1290 					   skb, th)) {
1291 	case TCP_TW_SYN:
1292 	{
1293 		struct sock *sk2;
1294 
1295 		sk2 = inet6_lookup_listener(&tcp_hashinfo,
1296 					    &skb->nh.ipv6h->daddr,
1297 					    ntohs(th->dest), inet6_iif(skb));
1298 		if (sk2 != NULL) {
1299 			struct inet_timewait_sock *tw = inet_twsk(sk);
1300 			inet_twsk_deschedule(tw, &tcp_death_row);
1301 			inet_twsk_put(tw);
1302 			sk = sk2;
1303 			goto process;
1304 		}
1305 		/* Fall through to ACK */
1306 	}
1307 	case TCP_TW_ACK:
1308 		tcp_v6_timewait_ack(sk, skb);
1309 		break;
1310 	case TCP_TW_RST:
1311 		goto no_tcp_socket;
1312 	case TCP_TW_SUCCESS:;
1313 	}
1314 	goto discard_it;
1315 }
1316 
1317 static int tcp_v6_remember_stamp(struct sock *sk)
1318 {
1319 	/* Alas, not yet... */
1320 	return 0;
1321 }
1322 
1323 static struct inet_connection_sock_af_ops ipv6_specific = {
1324 	.queue_xmit	   = inet6_csk_xmit,
1325 	.send_check	   = tcp_v6_send_check,
1326 	.rebuild_header	   = inet6_sk_rebuild_header,
1327 	.conn_request	   = tcp_v6_conn_request,
1328 	.syn_recv_sock	   = tcp_v6_syn_recv_sock,
1329 	.remember_stamp	   = tcp_v6_remember_stamp,
1330 	.net_header_len	   = sizeof(struct ipv6hdr),
1331 	.setsockopt	   = ipv6_setsockopt,
1332 	.getsockopt	   = ipv6_getsockopt,
1333 	.addr2sockaddr	   = inet6_csk_addr2sockaddr,
1334 	.sockaddr_len	   = sizeof(struct sockaddr_in6),
1335 #ifdef CONFIG_COMPAT
1336 	.compat_setsockopt = compat_ipv6_setsockopt,
1337 	.compat_getsockopt = compat_ipv6_getsockopt,
1338 #endif
1339 };
1340 
1341 /*
1342  *	TCP over IPv4 via INET6 API
1343  */
1344 
1345 static struct inet_connection_sock_af_ops ipv6_mapped = {
1346 	.queue_xmit	   = ip_queue_xmit,
1347 	.send_check	   = tcp_v4_send_check,
1348 	.rebuild_header	   = inet_sk_rebuild_header,
1349 	.conn_request	   = tcp_v6_conn_request,
1350 	.syn_recv_sock	   = tcp_v6_syn_recv_sock,
1351 	.remember_stamp	   = tcp_v4_remember_stamp,
1352 	.net_header_len	   = sizeof(struct iphdr),
1353 	.setsockopt	   = ipv6_setsockopt,
1354 	.getsockopt	   = ipv6_getsockopt,
1355 	.addr2sockaddr	   = inet6_csk_addr2sockaddr,
1356 	.sockaddr_len	   = sizeof(struct sockaddr_in6),
1357 #ifdef CONFIG_COMPAT
1358 	.compat_setsockopt = compat_ipv6_setsockopt,
1359 	.compat_getsockopt = compat_ipv6_getsockopt,
1360 #endif
1361 };
1362 
1363 /* NOTE: A lot of things set to zero explicitly by call to
1364  *       sk_alloc() so need not be done here.
1365  */
1366 static int tcp_v6_init_sock(struct sock *sk)
1367 {
1368 	struct inet_connection_sock *icsk = inet_csk(sk);
1369 	struct tcp_sock *tp = tcp_sk(sk);
1370 
1371 	skb_queue_head_init(&tp->out_of_order_queue);
1372 	tcp_init_xmit_timers(sk);
1373 	tcp_prequeue_init(tp);
1374 
1375 	icsk->icsk_rto = TCP_TIMEOUT_INIT;
1376 	tp->mdev = TCP_TIMEOUT_INIT;
1377 
1378 	/* So many TCP implementations out there (incorrectly) count the
1379 	 * initial SYN frame in their delayed-ACK and congestion control
1380 	 * algorithms that we must have the following bandaid to talk
1381 	 * efficiently to them.  -DaveM
1382 	 */
1383 	tp->snd_cwnd = 2;
1384 
1385 	/* See draft-stevens-tcpca-spec-01 for discussion of the
1386 	 * initialization of these values.
1387 	 */
1388 	tp->snd_ssthresh = 0x7fffffff;
1389 	tp->snd_cwnd_clamp = ~0;
1390 	tp->mss_cache = 536;
1391 
1392 	tp->reordering = sysctl_tcp_reordering;
1393 
1394 	sk->sk_state = TCP_CLOSE;
1395 
1396 	icsk->icsk_af_ops = &ipv6_specific;
1397 	icsk->icsk_ca_ops = &tcp_init_congestion_ops;
1398 	icsk->icsk_sync_mss = tcp_sync_mss;
1399 	sk->sk_write_space = sk_stream_write_space;
1400 	sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
1401 
1402 	sk->sk_sndbuf = sysctl_tcp_wmem[1];
1403 	sk->sk_rcvbuf = sysctl_tcp_rmem[1];
1404 
1405 	atomic_inc(&tcp_sockets_allocated);
1406 
1407 	return 0;
1408 }
1409 
1410 static int tcp_v6_destroy_sock(struct sock *sk)
1411 {
1412 	tcp_v4_destroy_sock(sk);
1413 	return inet6_destroy_sock(sk);
1414 }
1415 
1416 /* Proc filesystem TCPv6 sock list dumping. */
1417 static void get_openreq6(struct seq_file *seq,
1418 			 struct sock *sk, struct request_sock *req, int i, int uid)
1419 {
1420 	int ttd = req->expires - jiffies;
1421 	struct in6_addr *src = &inet6_rsk(req)->loc_addr;
1422 	struct in6_addr *dest = &inet6_rsk(req)->rmt_addr;
1423 
1424 	if (ttd < 0)
1425 		ttd = 0;
1426 
1427 	seq_printf(seq,
1428 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1429 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
1430 		   i,
1431 		   src->s6_addr32[0], src->s6_addr32[1],
1432 		   src->s6_addr32[2], src->s6_addr32[3],
1433 		   ntohs(inet_sk(sk)->sport),
1434 		   dest->s6_addr32[0], dest->s6_addr32[1],
1435 		   dest->s6_addr32[2], dest->s6_addr32[3],
1436 		   ntohs(inet_rsk(req)->rmt_port),
1437 		   TCP_SYN_RECV,
1438 		   0,0, /* could print option size, but that is af dependent. */
1439 		   1,   /* timers active (only the expire timer) */
1440 		   jiffies_to_clock_t(ttd),
1441 		   req->retrans,
1442 		   uid,
1443 		   0,  /* non standard timer */
1444 		   0, /* open_requests have no inode */
1445 		   0, req);
1446 }
1447 
1448 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
1449 {
1450 	struct in6_addr *dest, *src;
1451 	__u16 destp, srcp;
1452 	int timer_active;
1453 	unsigned long timer_expires;
1454 	struct inet_sock *inet = inet_sk(sp);
1455 	struct tcp_sock *tp = tcp_sk(sp);
1456 	const struct inet_connection_sock *icsk = inet_csk(sp);
1457 	struct ipv6_pinfo *np = inet6_sk(sp);
1458 
1459 	dest  = &np->daddr;
1460 	src   = &np->rcv_saddr;
1461 	destp = ntohs(inet->dport);
1462 	srcp  = ntohs(inet->sport);
1463 
1464 	if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
1465 		timer_active	= 1;
1466 		timer_expires	= icsk->icsk_timeout;
1467 	} else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
1468 		timer_active	= 4;
1469 		timer_expires	= icsk->icsk_timeout;
1470 	} else if (timer_pending(&sp->sk_timer)) {
1471 		timer_active	= 2;
1472 		timer_expires	= sp->sk_timer.expires;
1473 	} else {
1474 		timer_active	= 0;
1475 		timer_expires = jiffies;
1476 	}
1477 
1478 	seq_printf(seq,
1479 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1480 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %u %u %u %u %d\n",
1481 		   i,
1482 		   src->s6_addr32[0], src->s6_addr32[1],
1483 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
1484 		   dest->s6_addr32[0], dest->s6_addr32[1],
1485 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
1486 		   sp->sk_state,
1487 		   tp->write_seq-tp->snd_una,
1488 		   (sp->sk_state == TCP_LISTEN) ? sp->sk_ack_backlog : (tp->rcv_nxt - tp->copied_seq),
1489 		   timer_active,
1490 		   jiffies_to_clock_t(timer_expires - jiffies),
1491 		   icsk->icsk_retransmits,
1492 		   sock_i_uid(sp),
1493 		   icsk->icsk_probes_out,
1494 		   sock_i_ino(sp),
1495 		   atomic_read(&sp->sk_refcnt), sp,
1496 		   icsk->icsk_rto,
1497 		   icsk->icsk_ack.ato,
1498 		   (icsk->icsk_ack.quick << 1 ) | icsk->icsk_ack.pingpong,
1499 		   tp->snd_cwnd, tp->snd_ssthresh>=0xFFFF?-1:tp->snd_ssthresh
1500 		   );
1501 }
1502 
1503 static void get_timewait6_sock(struct seq_file *seq,
1504 			       struct inet_timewait_sock *tw, int i)
1505 {
1506 	struct in6_addr *dest, *src;
1507 	__u16 destp, srcp;
1508 	struct inet6_timewait_sock *tw6 = inet6_twsk((struct sock *)tw);
1509 	int ttd = tw->tw_ttd - jiffies;
1510 
1511 	if (ttd < 0)
1512 		ttd = 0;
1513 
1514 	dest = &tw6->tw_v6_daddr;
1515 	src  = &tw6->tw_v6_rcv_saddr;
1516 	destp = ntohs(tw->tw_dport);
1517 	srcp  = ntohs(tw->tw_sport);
1518 
1519 	seq_printf(seq,
1520 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1521 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
1522 		   i,
1523 		   src->s6_addr32[0], src->s6_addr32[1],
1524 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
1525 		   dest->s6_addr32[0], dest->s6_addr32[1],
1526 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
1527 		   tw->tw_substate, 0, 0,
1528 		   3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
1529 		   atomic_read(&tw->tw_refcnt), tw);
1530 }
1531 
1532 #ifdef CONFIG_PROC_FS
1533 static int tcp6_seq_show(struct seq_file *seq, void *v)
1534 {
1535 	struct tcp_iter_state *st;
1536 
1537 	if (v == SEQ_START_TOKEN) {
1538 		seq_puts(seq,
1539 			 "  sl  "
1540 			 "local_address                         "
1541 			 "remote_address                        "
1542 			 "st tx_queue rx_queue tr tm->when retrnsmt"
1543 			 "   uid  timeout inode\n");
1544 		goto out;
1545 	}
1546 	st = seq->private;
1547 
1548 	switch (st->state) {
1549 	case TCP_SEQ_STATE_LISTENING:
1550 	case TCP_SEQ_STATE_ESTABLISHED:
1551 		get_tcp6_sock(seq, v, st->num);
1552 		break;
1553 	case TCP_SEQ_STATE_OPENREQ:
1554 		get_openreq6(seq, st->syn_wait_sk, v, st->num, st->uid);
1555 		break;
1556 	case TCP_SEQ_STATE_TIME_WAIT:
1557 		get_timewait6_sock(seq, v, st->num);
1558 		break;
1559 	}
1560 out:
1561 	return 0;
1562 }
1563 
1564 static struct file_operations tcp6_seq_fops;
1565 static struct tcp_seq_afinfo tcp6_seq_afinfo = {
1566 	.owner		= THIS_MODULE,
1567 	.name		= "tcp6",
1568 	.family		= AF_INET6,
1569 	.seq_show	= tcp6_seq_show,
1570 	.seq_fops	= &tcp6_seq_fops,
1571 };
1572 
1573 int __init tcp6_proc_init(void)
1574 {
1575 	return tcp_proc_register(&tcp6_seq_afinfo);
1576 }
1577 
1578 void tcp6_proc_exit(void)
1579 {
1580 	tcp_proc_unregister(&tcp6_seq_afinfo);
1581 }
1582 #endif
1583 
1584 struct proto tcpv6_prot = {
1585 	.name			= "TCPv6",
1586 	.owner			= THIS_MODULE,
1587 	.close			= tcp_close,
1588 	.connect		= tcp_v6_connect,
1589 	.disconnect		= tcp_disconnect,
1590 	.accept			= inet_csk_accept,
1591 	.ioctl			= tcp_ioctl,
1592 	.init			= tcp_v6_init_sock,
1593 	.destroy		= tcp_v6_destroy_sock,
1594 	.shutdown		= tcp_shutdown,
1595 	.setsockopt		= tcp_setsockopt,
1596 	.getsockopt		= tcp_getsockopt,
1597 	.sendmsg		= tcp_sendmsg,
1598 	.recvmsg		= tcp_recvmsg,
1599 	.backlog_rcv		= tcp_v6_do_rcv,
1600 	.hash			= tcp_v6_hash,
1601 	.unhash			= tcp_unhash,
1602 	.get_port		= tcp_v6_get_port,
1603 	.enter_memory_pressure	= tcp_enter_memory_pressure,
1604 	.sockets_allocated	= &tcp_sockets_allocated,
1605 	.memory_allocated	= &tcp_memory_allocated,
1606 	.memory_pressure	= &tcp_memory_pressure,
1607 	.orphan_count		= &tcp_orphan_count,
1608 	.sysctl_mem		= sysctl_tcp_mem,
1609 	.sysctl_wmem		= sysctl_tcp_wmem,
1610 	.sysctl_rmem		= sysctl_tcp_rmem,
1611 	.max_header		= MAX_TCP_HEADER,
1612 	.obj_size		= sizeof(struct tcp6_sock),
1613 	.twsk_prot		= &tcp6_timewait_sock_ops,
1614 	.rsk_prot		= &tcp6_request_sock_ops,
1615 #ifdef CONFIG_COMPAT
1616 	.compat_setsockopt	= compat_tcp_setsockopt,
1617 	.compat_getsockopt	= compat_tcp_getsockopt,
1618 #endif
1619 };
1620 
1621 static struct inet6_protocol tcpv6_protocol = {
1622 	.handler	=	tcp_v6_rcv,
1623 	.err_handler	=	tcp_v6_err,
1624 	.gso_send_check	=	tcp_v6_gso_send_check,
1625 	.gso_segment	=	tcp_tso_segment,
1626 	.flags		=	INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
1627 };
1628 
1629 static struct inet_protosw tcpv6_protosw = {
1630 	.type		=	SOCK_STREAM,
1631 	.protocol	=	IPPROTO_TCP,
1632 	.prot		=	&tcpv6_prot,
1633 	.ops		=	&inet6_stream_ops,
1634 	.capability	=	-1,
1635 	.no_check	=	0,
1636 	.flags		=	INET_PROTOSW_PERMANENT |
1637 				INET_PROTOSW_ICSK,
1638 };
1639 
1640 void __init tcpv6_init(void)
1641 {
1642 	/* register inet6 protocol */
1643 	if (inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP) < 0)
1644 		printk(KERN_ERR "tcpv6_init: Could not register protocol\n");
1645 	inet6_register_protosw(&tcpv6_protosw);
1646 
1647 	if (inet_csk_ctl_sock_create(&tcp6_socket, PF_INET6, SOCK_RAW,
1648 				     IPPROTO_TCP) < 0)
1649 		panic("Failed to create the TCPv6 control socket.\n");
1650 }
1651