xref: /linux/net/ipv6/tcp_ipv6.c (revision 776cfebb430c7b22c208b1b17add97f354d97cab)
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/config.h>
30 #include <linux/errno.h>
31 #include <linux/types.h>
32 #include <linux/socket.h>
33 #include <linux/sockios.h>
34 #include <linux/net.h>
35 #include <linux/jiffies.h>
36 #include <linux/in.h>
37 #include <linux/in6.h>
38 #include <linux/netdevice.h>
39 #include <linux/init.h>
40 #include <linux/jhash.h>
41 #include <linux/ipsec.h>
42 #include <linux/times.h>
43 
44 #include <linux/ipv6.h>
45 #include <linux/icmpv6.h>
46 #include <linux/random.h>
47 
48 #include <net/tcp.h>
49 #include <net/ndisc.h>
50 #include <net/ipv6.h>
51 #include <net/transp_v6.h>
52 #include <net/addrconf.h>
53 #include <net/ip6_route.h>
54 #include <net/ip6_checksum.h>
55 #include <net/inet_ecn.h>
56 #include <net/protocol.h>
57 #include <net/xfrm.h>
58 #include <net/addrconf.h>
59 #include <net/snmp.h>
60 #include <net/dsfield.h>
61 
62 #include <asm/uaccess.h>
63 
64 #include <linux/proc_fs.h>
65 #include <linux/seq_file.h>
66 
67 static void	tcp_v6_send_reset(struct sk_buff *skb);
68 static void	tcp_v6_or_send_ack(struct sk_buff *skb, struct open_request *req);
69 static void	tcp_v6_send_check(struct sock *sk, struct tcphdr *th, int len,
70 				  struct sk_buff *skb);
71 
72 static int	tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
73 static int	tcp_v6_xmit(struct sk_buff *skb, int ipfragok);
74 
75 static struct tcp_func ipv6_mapped;
76 static struct tcp_func ipv6_specific;
77 
78 /* I have no idea if this is a good hash for v6 or not. -DaveM */
79 static __inline__ int tcp_v6_hashfn(struct in6_addr *laddr, u16 lport,
80 				    struct in6_addr *faddr, u16 fport)
81 {
82 	int hashent = (lport ^ fport);
83 
84 	hashent ^= (laddr->s6_addr32[3] ^ faddr->s6_addr32[3]);
85 	hashent ^= hashent>>16;
86 	hashent ^= hashent>>8;
87 	return (hashent & (tcp_ehash_size - 1));
88 }
89 
90 static __inline__ int tcp_v6_sk_hashfn(struct sock *sk)
91 {
92 	struct inet_sock *inet = inet_sk(sk);
93 	struct ipv6_pinfo *np = inet6_sk(sk);
94 	struct in6_addr *laddr = &np->rcv_saddr;
95 	struct in6_addr *faddr = &np->daddr;
96 	__u16 lport = inet->num;
97 	__u16 fport = inet->dport;
98 	return tcp_v6_hashfn(laddr, lport, faddr, fport);
99 }
100 
101 static inline int tcp_v6_bind_conflict(struct sock *sk,
102 				       struct tcp_bind_bucket *tb)
103 {
104 	struct sock *sk2;
105 	struct hlist_node *node;
106 
107 	/* We must walk the whole port owner list in this case. -DaveM */
108 	sk_for_each_bound(sk2, node, &tb->owners) {
109 		if (sk != sk2 &&
110 		    (!sk->sk_bound_dev_if ||
111 		     !sk2->sk_bound_dev_if ||
112 		     sk->sk_bound_dev_if == sk2->sk_bound_dev_if) &&
113 		    (!sk->sk_reuse || !sk2->sk_reuse ||
114 		     sk2->sk_state == TCP_LISTEN) &&
115 		     ipv6_rcv_saddr_equal(sk, sk2))
116 			break;
117 	}
118 
119 	return node != NULL;
120 }
121 
122 /* Grrr, addr_type already calculated by caller, but I don't want
123  * to add some silly "cookie" argument to this method just for that.
124  * But it doesn't matter, the recalculation is in the rarest path
125  * this function ever takes.
126  */
127 static int tcp_v6_get_port(struct sock *sk, unsigned short snum)
128 {
129 	struct tcp_bind_hashbucket *head;
130 	struct tcp_bind_bucket *tb;
131 	struct hlist_node *node;
132 	int ret;
133 
134 	local_bh_disable();
135 	if (snum == 0) {
136 		int low = sysctl_local_port_range[0];
137 		int high = sysctl_local_port_range[1];
138 		int remaining = (high - low) + 1;
139 		int rover;
140 
141 		spin_lock(&tcp_portalloc_lock);
142 		if (tcp_port_rover < low)
143 			rover = low;
144 		else
145 			rover = tcp_port_rover;
146 		do {	rover++;
147 			if (rover > high)
148 				rover = low;
149 			head = &tcp_bhash[tcp_bhashfn(rover)];
150 			spin_lock(&head->lock);
151 			tb_for_each(tb, node, &head->chain)
152 				if (tb->port == rover)
153 					goto next;
154 			break;
155 		next:
156 			spin_unlock(&head->lock);
157 		} while (--remaining > 0);
158 		tcp_port_rover = rover;
159 		spin_unlock(&tcp_portalloc_lock);
160 
161 		/* Exhausted local port range during search? */
162 		ret = 1;
163 		if (remaining <= 0)
164 			goto fail;
165 
166 		/* OK, here is the one we will use. */
167 		snum = rover;
168 	} else {
169 		head = &tcp_bhash[tcp_bhashfn(snum)];
170 		spin_lock(&head->lock);
171 		tb_for_each(tb, node, &head->chain)
172 			if (tb->port == snum)
173 				goto tb_found;
174 	}
175 	tb = NULL;
176 	goto tb_not_found;
177 tb_found:
178 	if (tb && !hlist_empty(&tb->owners)) {
179 		if (tb->fastreuse > 0 && sk->sk_reuse &&
180 		    sk->sk_state != TCP_LISTEN) {
181 			goto success;
182 		} else {
183 			ret = 1;
184 			if (tcp_v6_bind_conflict(sk, tb))
185 				goto fail_unlock;
186 		}
187 	}
188 tb_not_found:
189 	ret = 1;
190 	if (!tb && (tb = tcp_bucket_create(head, snum)) == NULL)
191 		goto fail_unlock;
192 	if (hlist_empty(&tb->owners)) {
193 		if (sk->sk_reuse && sk->sk_state != TCP_LISTEN)
194 			tb->fastreuse = 1;
195 		else
196 			tb->fastreuse = 0;
197 	} else if (tb->fastreuse &&
198 		   (!sk->sk_reuse || sk->sk_state == TCP_LISTEN))
199 		tb->fastreuse = 0;
200 
201 success:
202 	if (!tcp_sk(sk)->bind_hash)
203 		tcp_bind_hash(sk, tb, snum);
204 	BUG_TRAP(tcp_sk(sk)->bind_hash == tb);
205 	ret = 0;
206 
207 fail_unlock:
208 	spin_unlock(&head->lock);
209 fail:
210 	local_bh_enable();
211 	return ret;
212 }
213 
214 static __inline__ void __tcp_v6_hash(struct sock *sk)
215 {
216 	struct hlist_head *list;
217 	rwlock_t *lock;
218 
219 	BUG_TRAP(sk_unhashed(sk));
220 
221 	if (sk->sk_state == TCP_LISTEN) {
222 		list = &tcp_listening_hash[tcp_sk_listen_hashfn(sk)];
223 		lock = &tcp_lhash_lock;
224 		tcp_listen_wlock();
225 	} else {
226 		sk->sk_hashent = tcp_v6_sk_hashfn(sk);
227 		list = &tcp_ehash[sk->sk_hashent].chain;
228 		lock = &tcp_ehash[sk->sk_hashent].lock;
229 		write_lock(lock);
230 	}
231 
232 	__sk_add_node(sk, list);
233 	sock_prot_inc_use(sk->sk_prot);
234 	write_unlock(lock);
235 }
236 
237 
238 static void tcp_v6_hash(struct sock *sk)
239 {
240 	if (sk->sk_state != TCP_CLOSE) {
241 		struct tcp_sock *tp = tcp_sk(sk);
242 
243 		if (tp->af_specific == &ipv6_mapped) {
244 			tcp_prot.hash(sk);
245 			return;
246 		}
247 		local_bh_disable();
248 		__tcp_v6_hash(sk);
249 		local_bh_enable();
250 	}
251 }
252 
253 static struct sock *tcp_v6_lookup_listener(struct in6_addr *daddr, unsigned short hnum, int dif)
254 {
255 	struct sock *sk;
256 	struct hlist_node *node;
257 	struct sock *result = NULL;
258 	int score, hiscore;
259 
260 	hiscore=0;
261 	read_lock(&tcp_lhash_lock);
262 	sk_for_each(sk, node, &tcp_listening_hash[tcp_lhashfn(hnum)]) {
263 		if (inet_sk(sk)->num == hnum && sk->sk_family == PF_INET6) {
264 			struct ipv6_pinfo *np = inet6_sk(sk);
265 
266 			score = 1;
267 			if (!ipv6_addr_any(&np->rcv_saddr)) {
268 				if (!ipv6_addr_equal(&np->rcv_saddr, daddr))
269 					continue;
270 				score++;
271 			}
272 			if (sk->sk_bound_dev_if) {
273 				if (sk->sk_bound_dev_if != dif)
274 					continue;
275 				score++;
276 			}
277 			if (score == 3) {
278 				result = sk;
279 				break;
280 			}
281 			if (score > hiscore) {
282 				hiscore = score;
283 				result = sk;
284 			}
285 		}
286 	}
287 	if (result)
288 		sock_hold(result);
289 	read_unlock(&tcp_lhash_lock);
290 	return result;
291 }
292 
293 /* Sockets in TCP_CLOSE state are _always_ taken out of the hash, so
294  * we need not check it for TCP lookups anymore, thanks Alexey. -DaveM
295  *
296  * The sockhash lock must be held as a reader here.
297  */
298 
299 static inline struct sock *__tcp_v6_lookup_established(struct in6_addr *saddr, u16 sport,
300 						       struct in6_addr *daddr, u16 hnum,
301 						       int dif)
302 {
303 	struct tcp_ehash_bucket *head;
304 	struct sock *sk;
305 	struct hlist_node *node;
306 	__u32 ports = TCP_COMBINED_PORTS(sport, hnum);
307 	int hash;
308 
309 	/* Optimize here for direct hit, only listening connections can
310 	 * have wildcards anyways.
311 	 */
312 	hash = tcp_v6_hashfn(daddr, hnum, saddr, sport);
313 	head = &tcp_ehash[hash];
314 	read_lock(&head->lock);
315 	sk_for_each(sk, node, &head->chain) {
316 		/* For IPV6 do the cheaper port and family tests first. */
317 		if(TCP_IPV6_MATCH(sk, saddr, daddr, ports, dif))
318 			goto hit; /* You sunk my battleship! */
319 	}
320 	/* Must check for a TIME_WAIT'er before going to listener hash. */
321 	sk_for_each(sk, node, &(head + tcp_ehash_size)->chain) {
322 		/* FIXME: acme: check this... */
323 		struct tcp_tw_bucket *tw = (struct tcp_tw_bucket *)sk;
324 
325 		if(*((__u32 *)&(tw->tw_dport))	== ports	&&
326 		   sk->sk_family		== PF_INET6) {
327 			if(ipv6_addr_equal(&tw->tw_v6_daddr, saddr)	&&
328 			   ipv6_addr_equal(&tw->tw_v6_rcv_saddr, daddr)	&&
329 			   (!sk->sk_bound_dev_if || sk->sk_bound_dev_if == dif))
330 				goto hit;
331 		}
332 	}
333 	read_unlock(&head->lock);
334 	return NULL;
335 
336 hit:
337 	sock_hold(sk);
338 	read_unlock(&head->lock);
339 	return sk;
340 }
341 
342 
343 static inline struct sock *__tcp_v6_lookup(struct in6_addr *saddr, u16 sport,
344 					   struct in6_addr *daddr, u16 hnum,
345 					   int dif)
346 {
347 	struct sock *sk;
348 
349 	sk = __tcp_v6_lookup_established(saddr, sport, daddr, hnum, dif);
350 
351 	if (sk)
352 		return sk;
353 
354 	return tcp_v6_lookup_listener(daddr, hnum, dif);
355 }
356 
357 inline struct sock *tcp_v6_lookup(struct in6_addr *saddr, u16 sport,
358 				  struct in6_addr *daddr, u16 dport,
359 				  int dif)
360 {
361 	struct sock *sk;
362 
363 	local_bh_disable();
364 	sk = __tcp_v6_lookup(saddr, sport, daddr, ntohs(dport), dif);
365 	local_bh_enable();
366 
367 	return sk;
368 }
369 
370 EXPORT_SYMBOL_GPL(tcp_v6_lookup);
371 
372 
373 /*
374  * Open request hash tables.
375  */
376 
377 static u32 tcp_v6_synq_hash(struct in6_addr *raddr, u16 rport, u32 rnd)
378 {
379 	u32 a, b, c;
380 
381 	a = raddr->s6_addr32[0];
382 	b = raddr->s6_addr32[1];
383 	c = raddr->s6_addr32[2];
384 
385 	a += JHASH_GOLDEN_RATIO;
386 	b += JHASH_GOLDEN_RATIO;
387 	c += rnd;
388 	__jhash_mix(a, b, c);
389 
390 	a += raddr->s6_addr32[3];
391 	b += (u32) rport;
392 	__jhash_mix(a, b, c);
393 
394 	return c & (TCP_SYNQ_HSIZE - 1);
395 }
396 
397 static struct open_request *tcp_v6_search_req(struct tcp_sock *tp,
398 					      struct open_request ***prevp,
399 					      __u16 rport,
400 					      struct in6_addr *raddr,
401 					      struct in6_addr *laddr,
402 					      int iif)
403 {
404 	struct tcp_listen_opt *lopt = tp->listen_opt;
405 	struct open_request *req, **prev;
406 
407 	for (prev = &lopt->syn_table[tcp_v6_synq_hash(raddr, rport, lopt->hash_rnd)];
408 	     (req = *prev) != NULL;
409 	     prev = &req->dl_next) {
410 		if (req->rmt_port == rport &&
411 		    req->class->family == AF_INET6 &&
412 		    ipv6_addr_equal(&req->af.v6_req.rmt_addr, raddr) &&
413 		    ipv6_addr_equal(&req->af.v6_req.loc_addr, laddr) &&
414 		    (!req->af.v6_req.iif || req->af.v6_req.iif == iif)) {
415 			BUG_TRAP(req->sk == NULL);
416 			*prevp = prev;
417 			return req;
418 		}
419 	}
420 
421 	return NULL;
422 }
423 
424 static __inline__ u16 tcp_v6_check(struct tcphdr *th, int len,
425 				   struct in6_addr *saddr,
426 				   struct in6_addr *daddr,
427 				   unsigned long base)
428 {
429 	return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base);
430 }
431 
432 static __u32 tcp_v6_init_sequence(struct sock *sk, struct sk_buff *skb)
433 {
434 	if (skb->protocol == htons(ETH_P_IPV6)) {
435 		return secure_tcpv6_sequence_number(skb->nh.ipv6h->daddr.s6_addr32,
436 						    skb->nh.ipv6h->saddr.s6_addr32,
437 						    skb->h.th->dest,
438 						    skb->h.th->source);
439 	} else {
440 		return secure_tcp_sequence_number(skb->nh.iph->daddr,
441 						  skb->nh.iph->saddr,
442 						  skb->h.th->dest,
443 						  skb->h.th->source);
444 	}
445 }
446 
447 static int __tcp_v6_check_established(struct sock *sk, __u16 lport,
448 				      struct tcp_tw_bucket **twp)
449 {
450 	struct inet_sock *inet = inet_sk(sk);
451 	struct ipv6_pinfo *np = inet6_sk(sk);
452 	struct in6_addr *daddr = &np->rcv_saddr;
453 	struct in6_addr *saddr = &np->daddr;
454 	int dif = sk->sk_bound_dev_if;
455 	u32 ports = TCP_COMBINED_PORTS(inet->dport, lport);
456 	int hash = tcp_v6_hashfn(daddr, inet->num, saddr, inet->dport);
457 	struct tcp_ehash_bucket *head = &tcp_ehash[hash];
458 	struct sock *sk2;
459 	struct hlist_node *node;
460 	struct tcp_tw_bucket *tw;
461 
462 	write_lock(&head->lock);
463 
464 	/* Check TIME-WAIT sockets first. */
465 	sk_for_each(sk2, node, &(head + tcp_ehash_size)->chain) {
466 		tw = (struct tcp_tw_bucket*)sk2;
467 
468 		if(*((__u32 *)&(tw->tw_dport))	== ports	&&
469 		   sk2->sk_family		== PF_INET6	&&
470 		   ipv6_addr_equal(&tw->tw_v6_daddr, saddr)	&&
471 		   ipv6_addr_equal(&tw->tw_v6_rcv_saddr, daddr)	&&
472 		   sk2->sk_bound_dev_if == sk->sk_bound_dev_if) {
473 			struct tcp_sock *tp = tcp_sk(sk);
474 
475 			if (tw->tw_ts_recent_stamp &&
476 			    (!twp || (sysctl_tcp_tw_reuse &&
477 				      xtime.tv_sec -
478 				      tw->tw_ts_recent_stamp > 1))) {
479 				/* See comment in tcp_ipv4.c */
480 				tp->write_seq = tw->tw_snd_nxt + 65535 + 2;
481 				if (!tp->write_seq)
482 					tp->write_seq = 1;
483 				tp->rx_opt.ts_recent = tw->tw_ts_recent;
484 				tp->rx_opt.ts_recent_stamp = tw->tw_ts_recent_stamp;
485 				sock_hold(sk2);
486 				goto unique;
487 			} else
488 				goto not_unique;
489 		}
490 	}
491 	tw = NULL;
492 
493 	/* And established part... */
494 	sk_for_each(sk2, node, &head->chain) {
495 		if(TCP_IPV6_MATCH(sk2, saddr, daddr, ports, dif))
496 			goto not_unique;
497 	}
498 
499 unique:
500 	BUG_TRAP(sk_unhashed(sk));
501 	__sk_add_node(sk, &head->chain);
502 	sk->sk_hashent = hash;
503 	sock_prot_inc_use(sk->sk_prot);
504 	write_unlock(&head->lock);
505 
506 	if (twp) {
507 		*twp = tw;
508 		NET_INC_STATS_BH(LINUX_MIB_TIMEWAITRECYCLED);
509 	} else if (tw) {
510 		/* Silly. Should hash-dance instead... */
511 		tcp_tw_deschedule(tw);
512 		NET_INC_STATS_BH(LINUX_MIB_TIMEWAITRECYCLED);
513 
514 		tcp_tw_put(tw);
515 	}
516 	return 0;
517 
518 not_unique:
519 	write_unlock(&head->lock);
520 	return -EADDRNOTAVAIL;
521 }
522 
523 static inline u32 tcpv6_port_offset(const struct sock *sk)
524 {
525 	const struct inet_sock *inet = inet_sk(sk);
526 	const struct ipv6_pinfo *np = inet6_sk(sk);
527 
528 	return secure_tcpv6_port_ephemeral(np->rcv_saddr.s6_addr32,
529 					   np->daddr.s6_addr32,
530 					   inet->dport);
531 }
532 
533 static int tcp_v6_hash_connect(struct sock *sk)
534 {
535 	unsigned short snum = inet_sk(sk)->num;
536  	struct tcp_bind_hashbucket *head;
537  	struct tcp_bind_bucket *tb;
538 	int ret;
539 
540  	if (!snum) {
541  		int low = sysctl_local_port_range[0];
542  		int high = sysctl_local_port_range[1];
543 		int range = high - low;
544  		int i;
545 		int port;
546 		static u32 hint;
547 		u32 offset = hint + tcpv6_port_offset(sk);
548 		struct hlist_node *node;
549  		struct tcp_tw_bucket *tw = NULL;
550 
551  		local_bh_disable();
552 		for (i = 1; i <= range; i++) {
553 			port = low + (i + offset) % range;
554  			head = &tcp_bhash[tcp_bhashfn(port)];
555  			spin_lock(&head->lock);
556 
557  			/* Does not bother with rcv_saddr checks,
558  			 * because the established check is already
559  			 * unique enough.
560  			 */
561 			tb_for_each(tb, node, &head->chain) {
562  				if (tb->port == port) {
563  					BUG_TRAP(!hlist_empty(&tb->owners));
564  					if (tb->fastreuse >= 0)
565  						goto next_port;
566  					if (!__tcp_v6_check_established(sk,
567 									port,
568 									&tw))
569  						goto ok;
570  					goto next_port;
571  				}
572  			}
573 
574  			tb = tcp_bucket_create(head, port);
575  			if (!tb) {
576  				spin_unlock(&head->lock);
577  				break;
578  			}
579  			tb->fastreuse = -1;
580  			goto ok;
581 
582  		next_port:
583  			spin_unlock(&head->lock);
584  		}
585  		local_bh_enable();
586 
587  		return -EADDRNOTAVAIL;
588 
589 ok:
590 		hint += i;
591 
592  		/* Head lock still held and bh's disabled */
593  		tcp_bind_hash(sk, tb, port);
594 		if (sk_unhashed(sk)) {
595  			inet_sk(sk)->sport = htons(port);
596  			__tcp_v6_hash(sk);
597  		}
598  		spin_unlock(&head->lock);
599 
600  		if (tw) {
601  			tcp_tw_deschedule(tw);
602  			tcp_tw_put(tw);
603  		}
604 
605 		ret = 0;
606 		goto out;
607  	}
608 
609  	head  = &tcp_bhash[tcp_bhashfn(snum)];
610  	tb  = tcp_sk(sk)->bind_hash;
611 	spin_lock_bh(&head->lock);
612 
613 	if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) {
614 		__tcp_v6_hash(sk);
615 		spin_unlock_bh(&head->lock);
616 		return 0;
617 	} else {
618 		spin_unlock(&head->lock);
619 		/* No definite answer... Walk to established hash table */
620 		ret = __tcp_v6_check_established(sk, snum, NULL);
621 out:
622 		local_bh_enable();
623 		return ret;
624 	}
625 }
626 
627 static __inline__ int tcp_v6_iif(struct sk_buff *skb)
628 {
629 	return IP6CB(skb)->iif;
630 }
631 
632 static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
633 			  int addr_len)
634 {
635 	struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
636 	struct inet_sock *inet = inet_sk(sk);
637 	struct ipv6_pinfo *np = inet6_sk(sk);
638 	struct tcp_sock *tp = tcp_sk(sk);
639 	struct in6_addr *saddr = NULL, *final_p = NULL, final;
640 	struct flowi fl;
641 	struct dst_entry *dst;
642 	int addr_type;
643 	int err;
644 
645 	if (addr_len < SIN6_LEN_RFC2133)
646 		return -EINVAL;
647 
648 	if (usin->sin6_family != AF_INET6)
649 		return(-EAFNOSUPPORT);
650 
651 	memset(&fl, 0, sizeof(fl));
652 
653 	if (np->sndflow) {
654 		fl.fl6_flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
655 		IP6_ECN_flow_init(fl.fl6_flowlabel);
656 		if (fl.fl6_flowlabel&IPV6_FLOWLABEL_MASK) {
657 			struct ip6_flowlabel *flowlabel;
658 			flowlabel = fl6_sock_lookup(sk, fl.fl6_flowlabel);
659 			if (flowlabel == NULL)
660 				return -EINVAL;
661 			ipv6_addr_copy(&usin->sin6_addr, &flowlabel->dst);
662 			fl6_sock_release(flowlabel);
663 		}
664 	}
665 
666 	/*
667   	 *	connect() to INADDR_ANY means loopback (BSD'ism).
668   	 */
669 
670   	if(ipv6_addr_any(&usin->sin6_addr))
671 		usin->sin6_addr.s6_addr[15] = 0x1;
672 
673 	addr_type = ipv6_addr_type(&usin->sin6_addr);
674 
675 	if(addr_type & IPV6_ADDR_MULTICAST)
676 		return -ENETUNREACH;
677 
678 	if (addr_type&IPV6_ADDR_LINKLOCAL) {
679 		if (addr_len >= sizeof(struct sockaddr_in6) &&
680 		    usin->sin6_scope_id) {
681 			/* If interface is set while binding, indices
682 			 * must coincide.
683 			 */
684 			if (sk->sk_bound_dev_if &&
685 			    sk->sk_bound_dev_if != usin->sin6_scope_id)
686 				return -EINVAL;
687 
688 			sk->sk_bound_dev_if = usin->sin6_scope_id;
689 		}
690 
691 		/* Connect to link-local address requires an interface */
692 		if (!sk->sk_bound_dev_if)
693 			return -EINVAL;
694 	}
695 
696 	if (tp->rx_opt.ts_recent_stamp &&
697 	    !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) {
698 		tp->rx_opt.ts_recent = 0;
699 		tp->rx_opt.ts_recent_stamp = 0;
700 		tp->write_seq = 0;
701 	}
702 
703 	ipv6_addr_copy(&np->daddr, &usin->sin6_addr);
704 	np->flow_label = fl.fl6_flowlabel;
705 
706 	/*
707 	 *	TCP over IPv4
708 	 */
709 
710 	if (addr_type == IPV6_ADDR_MAPPED) {
711 		u32 exthdrlen = tp->ext_header_len;
712 		struct sockaddr_in sin;
713 
714 		SOCK_DEBUG(sk, "connect: ipv4 mapped\n");
715 
716 		if (__ipv6_only_sock(sk))
717 			return -ENETUNREACH;
718 
719 		sin.sin_family = AF_INET;
720 		sin.sin_port = usin->sin6_port;
721 		sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3];
722 
723 		tp->af_specific = &ipv6_mapped;
724 		sk->sk_backlog_rcv = tcp_v4_do_rcv;
725 
726 		err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
727 
728 		if (err) {
729 			tp->ext_header_len = exthdrlen;
730 			tp->af_specific = &ipv6_specific;
731 			sk->sk_backlog_rcv = tcp_v6_do_rcv;
732 			goto failure;
733 		} else {
734 			ipv6_addr_set(&np->saddr, 0, 0, htonl(0x0000FFFF),
735 				      inet->saddr);
736 			ipv6_addr_set(&np->rcv_saddr, 0, 0, htonl(0x0000FFFF),
737 				      inet->rcv_saddr);
738 		}
739 
740 		return err;
741 	}
742 
743 	if (!ipv6_addr_any(&np->rcv_saddr))
744 		saddr = &np->rcv_saddr;
745 
746 	fl.proto = IPPROTO_TCP;
747 	ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
748 	ipv6_addr_copy(&fl.fl6_src,
749 		       (saddr ? saddr : &np->saddr));
750 	fl.oif = sk->sk_bound_dev_if;
751 	fl.fl_ip_dport = usin->sin6_port;
752 	fl.fl_ip_sport = inet->sport;
753 
754 	if (np->opt && np->opt->srcrt) {
755 		struct rt0_hdr *rt0 = (struct rt0_hdr *)np->opt->srcrt;
756 		ipv6_addr_copy(&final, &fl.fl6_dst);
757 		ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
758 		final_p = &final;
759 	}
760 
761 	err = ip6_dst_lookup(sk, &dst, &fl);
762 	if (err)
763 		goto failure;
764 	if (final_p)
765 		ipv6_addr_copy(&fl.fl6_dst, final_p);
766 
767 	if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) {
768 		dst_release(dst);
769 		goto failure;
770 	}
771 
772 	if (saddr == NULL) {
773 		saddr = &fl.fl6_src;
774 		ipv6_addr_copy(&np->rcv_saddr, saddr);
775 	}
776 
777 	/* set the source address */
778 	ipv6_addr_copy(&np->saddr, saddr);
779 	inet->rcv_saddr = LOOPBACK4_IPV6;
780 
781 	ip6_dst_store(sk, dst, NULL);
782 	sk->sk_route_caps = dst->dev->features &
783 		~(NETIF_F_IP_CSUM | NETIF_F_TSO);
784 
785 	tp->ext_header_len = 0;
786 	if (np->opt)
787 		tp->ext_header_len = np->opt->opt_flen + np->opt->opt_nflen;
788 
789 	tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
790 
791 	inet->dport = usin->sin6_port;
792 
793 	tcp_set_state(sk, TCP_SYN_SENT);
794 	err = tcp_v6_hash_connect(sk);
795 	if (err)
796 		goto late_failure;
797 
798 	if (!tp->write_seq)
799 		tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
800 							     np->daddr.s6_addr32,
801 							     inet->sport,
802 							     inet->dport);
803 
804 	err = tcp_connect(sk);
805 	if (err)
806 		goto late_failure;
807 
808 	return 0;
809 
810 late_failure:
811 	tcp_set_state(sk, TCP_CLOSE);
812 	__sk_dst_reset(sk);
813 failure:
814 	inet->dport = 0;
815 	sk->sk_route_caps = 0;
816 	return err;
817 }
818 
819 static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
820 		int type, int code, int offset, __u32 info)
821 {
822 	struct ipv6hdr *hdr = (struct ipv6hdr*)skb->data;
823 	struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
824 	struct ipv6_pinfo *np;
825 	struct sock *sk;
826 	int err;
827 	struct tcp_sock *tp;
828 	__u32 seq;
829 
830 	sk = tcp_v6_lookup(&hdr->daddr, th->dest, &hdr->saddr, th->source, skb->dev->ifindex);
831 
832 	if (sk == NULL) {
833 		ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
834 		return;
835 	}
836 
837 	if (sk->sk_state == TCP_TIME_WAIT) {
838 		tcp_tw_put((struct tcp_tw_bucket*)sk);
839 		return;
840 	}
841 
842 	bh_lock_sock(sk);
843 	if (sock_owned_by_user(sk))
844 		NET_INC_STATS_BH(LINUX_MIB_LOCKDROPPEDICMPS);
845 
846 	if (sk->sk_state == TCP_CLOSE)
847 		goto out;
848 
849 	tp = tcp_sk(sk);
850 	seq = ntohl(th->seq);
851 	if (sk->sk_state != TCP_LISTEN &&
852 	    !between(seq, tp->snd_una, tp->snd_nxt)) {
853 		NET_INC_STATS_BH(LINUX_MIB_OUTOFWINDOWICMPS);
854 		goto out;
855 	}
856 
857 	np = inet6_sk(sk);
858 
859 	if (type == ICMPV6_PKT_TOOBIG) {
860 		struct dst_entry *dst = NULL;
861 
862 		if (sock_owned_by_user(sk))
863 			goto out;
864 		if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
865 			goto out;
866 
867 		/* icmp should have updated the destination cache entry */
868 		dst = __sk_dst_check(sk, np->dst_cookie);
869 
870 		if (dst == NULL) {
871 			struct inet_sock *inet = inet_sk(sk);
872 			struct flowi fl;
873 
874 			/* BUGGG_FUTURE: Again, it is not clear how
875 			   to handle rthdr case. Ignore this complexity
876 			   for now.
877 			 */
878 			memset(&fl, 0, sizeof(fl));
879 			fl.proto = IPPROTO_TCP;
880 			ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
881 			ipv6_addr_copy(&fl.fl6_src, &np->saddr);
882 			fl.oif = sk->sk_bound_dev_if;
883 			fl.fl_ip_dport = inet->dport;
884 			fl.fl_ip_sport = inet->sport;
885 
886 			if ((err = ip6_dst_lookup(sk, &dst, &fl))) {
887 				sk->sk_err_soft = -err;
888 				goto out;
889 			}
890 
891 			if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) {
892 				sk->sk_err_soft = -err;
893 				goto out;
894 			}
895 
896 		} else
897 			dst_hold(dst);
898 
899 		if (tp->pmtu_cookie > dst_mtu(dst)) {
900 			tcp_sync_mss(sk, dst_mtu(dst));
901 			tcp_simple_retransmit(sk);
902 		} /* else let the usual retransmit timer handle it */
903 		dst_release(dst);
904 		goto out;
905 	}
906 
907 	icmpv6_err_convert(type, code, &err);
908 
909 	/* Might be for an open_request */
910 	switch (sk->sk_state) {
911 		struct open_request *req, **prev;
912 	case TCP_LISTEN:
913 		if (sock_owned_by_user(sk))
914 			goto out;
915 
916 		req = tcp_v6_search_req(tp, &prev, th->dest, &hdr->daddr,
917 					&hdr->saddr, tcp_v6_iif(skb));
918 		if (!req)
919 			goto out;
920 
921 		/* ICMPs are not backlogged, hence we cannot get
922 		 * an established socket here.
923 		 */
924 		BUG_TRAP(req->sk == NULL);
925 
926 		if (seq != req->snt_isn) {
927 			NET_INC_STATS_BH(LINUX_MIB_OUTOFWINDOWICMPS);
928 			goto out;
929 		}
930 
931 		tcp_synq_drop(sk, req, prev);
932 		goto out;
933 
934 	case TCP_SYN_SENT:
935 	case TCP_SYN_RECV:  /* Cannot happen.
936 			       It can, it SYNs are crossed. --ANK */
937 		if (!sock_owned_by_user(sk)) {
938 			TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
939 			sk->sk_err = err;
940 			sk->sk_error_report(sk);		/* Wake people up to see the error (see connect in sock.c) */
941 
942 			tcp_done(sk);
943 		} else
944 			sk->sk_err_soft = err;
945 		goto out;
946 	}
947 
948 	if (!sock_owned_by_user(sk) && np->recverr) {
949 		sk->sk_err = err;
950 		sk->sk_error_report(sk);
951 	} else
952 		sk->sk_err_soft = err;
953 
954 out:
955 	bh_unlock_sock(sk);
956 	sock_put(sk);
957 }
958 
959 
960 static int tcp_v6_send_synack(struct sock *sk, struct open_request *req,
961 			      struct dst_entry *dst)
962 {
963 	struct ipv6_pinfo *np = inet6_sk(sk);
964 	struct sk_buff * skb;
965 	struct ipv6_txoptions *opt = NULL;
966 	struct in6_addr * final_p = NULL, final;
967 	struct flowi fl;
968 	int err = -1;
969 
970 	memset(&fl, 0, sizeof(fl));
971 	fl.proto = IPPROTO_TCP;
972 	ipv6_addr_copy(&fl.fl6_dst, &req->af.v6_req.rmt_addr);
973 	ipv6_addr_copy(&fl.fl6_src, &req->af.v6_req.loc_addr);
974 	fl.fl6_flowlabel = 0;
975 	fl.oif = req->af.v6_req.iif;
976 	fl.fl_ip_dport = req->rmt_port;
977 	fl.fl_ip_sport = inet_sk(sk)->sport;
978 
979 	if (dst == NULL) {
980 		opt = np->opt;
981 		if (opt == NULL &&
982 		    np->rxopt.bits.srcrt == 2 &&
983 		    req->af.v6_req.pktopts) {
984 			struct sk_buff *pktopts = req->af.v6_req.pktopts;
985 			struct inet6_skb_parm *rxopt = IP6CB(pktopts);
986 			if (rxopt->srcrt)
987 				opt = ipv6_invert_rthdr(sk, (struct ipv6_rt_hdr*)(pktopts->nh.raw + rxopt->srcrt));
988 		}
989 
990 		if (opt && opt->srcrt) {
991 			struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
992 			ipv6_addr_copy(&final, &fl.fl6_dst);
993 			ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
994 			final_p = &final;
995 		}
996 
997 		err = ip6_dst_lookup(sk, &dst, &fl);
998 		if (err)
999 			goto done;
1000 		if (final_p)
1001 			ipv6_addr_copy(&fl.fl6_dst, final_p);
1002 		if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0)
1003 			goto done;
1004 	}
1005 
1006 	skb = tcp_make_synack(sk, dst, req);
1007 	if (skb) {
1008 		struct tcphdr *th = skb->h.th;
1009 
1010 		th->check = tcp_v6_check(th, skb->len,
1011 					 &req->af.v6_req.loc_addr, &req->af.v6_req.rmt_addr,
1012 					 csum_partial((char *)th, skb->len, skb->csum));
1013 
1014 		ipv6_addr_copy(&fl.fl6_dst, &req->af.v6_req.rmt_addr);
1015 		err = ip6_xmit(sk, skb, &fl, opt, 0);
1016 		if (err == NET_XMIT_CN)
1017 			err = 0;
1018 	}
1019 
1020 done:
1021 	dst_release(dst);
1022         if (opt && opt != np->opt)
1023 		sock_kfree_s(sk, opt, opt->tot_len);
1024 	return err;
1025 }
1026 
1027 static void tcp_v6_or_free(struct open_request *req)
1028 {
1029 	if (req->af.v6_req.pktopts)
1030 		kfree_skb(req->af.v6_req.pktopts);
1031 }
1032 
1033 static struct or_calltable or_ipv6 = {
1034 	.family		=	AF_INET6,
1035 	.rtx_syn_ack	=	tcp_v6_send_synack,
1036 	.send_ack	=	tcp_v6_or_send_ack,
1037 	.destructor	=	tcp_v6_or_free,
1038 	.send_reset	=	tcp_v6_send_reset
1039 };
1040 
1041 static int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb)
1042 {
1043 	struct ipv6_pinfo *np = inet6_sk(sk);
1044 	struct inet6_skb_parm *opt = IP6CB(skb);
1045 
1046 	if (np->rxopt.all) {
1047 		if ((opt->hop && np->rxopt.bits.hopopts) ||
1048 		    ((IPV6_FLOWINFO_MASK&*(u32*)skb->nh.raw) &&
1049 		     np->rxopt.bits.rxflow) ||
1050 		    (opt->srcrt && np->rxopt.bits.srcrt) ||
1051 		    ((opt->dst1 || opt->dst0) && np->rxopt.bits.dstopts))
1052 			return 1;
1053 	}
1054 	return 0;
1055 }
1056 
1057 
1058 static void tcp_v6_send_check(struct sock *sk, struct tcphdr *th, int len,
1059 			      struct sk_buff *skb)
1060 {
1061 	struct ipv6_pinfo *np = inet6_sk(sk);
1062 
1063 	if (skb->ip_summed == CHECKSUM_HW) {
1064 		th->check = ~csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,  0);
1065 		skb->csum = offsetof(struct tcphdr, check);
1066 	} else {
1067 		th->check = csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,
1068 					    csum_partial((char *)th, th->doff<<2,
1069 							 skb->csum));
1070 	}
1071 }
1072 
1073 
1074 static void tcp_v6_send_reset(struct sk_buff *skb)
1075 {
1076 	struct tcphdr *th = skb->h.th, *t1;
1077 	struct sk_buff *buff;
1078 	struct flowi fl;
1079 
1080 	if (th->rst)
1081 		return;
1082 
1083 	if (!ipv6_unicast_destination(skb))
1084 		return;
1085 
1086 	/*
1087 	 * We need to grab some memory, and put together an RST,
1088 	 * and then put it into the queue to be sent.
1089 	 */
1090 
1091 	buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + sizeof(struct tcphdr),
1092 			 GFP_ATOMIC);
1093 	if (buff == NULL)
1094 	  	return;
1095 
1096 	skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + sizeof(struct tcphdr));
1097 
1098 	t1 = (struct tcphdr *) skb_push(buff,sizeof(struct tcphdr));
1099 
1100 	/* Swap the send and the receive. */
1101 	memset(t1, 0, sizeof(*t1));
1102 	t1->dest = th->source;
1103 	t1->source = th->dest;
1104 	t1->doff = sizeof(*t1)/4;
1105 	t1->rst = 1;
1106 
1107 	if(th->ack) {
1108 	  	t1->seq = th->ack_seq;
1109 	} else {
1110 		t1->ack = 1;
1111 		t1->ack_seq = htonl(ntohl(th->seq) + th->syn + th->fin
1112 				    + skb->len - (th->doff<<2));
1113 	}
1114 
1115 	buff->csum = csum_partial((char *)t1, sizeof(*t1), 0);
1116 
1117 	memset(&fl, 0, sizeof(fl));
1118 	ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);
1119 	ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr);
1120 
1121 	t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
1122 				    sizeof(*t1), IPPROTO_TCP,
1123 				    buff->csum);
1124 
1125 	fl.proto = IPPROTO_TCP;
1126 	fl.oif = tcp_v6_iif(skb);
1127 	fl.fl_ip_dport = t1->dest;
1128 	fl.fl_ip_sport = t1->source;
1129 
1130 	/* sk = NULL, but it is safe for now. RST socket required. */
1131 	if (!ip6_dst_lookup(NULL, &buff->dst, &fl)) {
1132 
1133 		if ((xfrm_lookup(&buff->dst, &fl, NULL, 0)) < 0) {
1134 			dst_release(buff->dst);
1135 			return;
1136 		}
1137 
1138 		ip6_xmit(NULL, buff, &fl, NULL, 0);
1139 		TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);
1140 		TCP_INC_STATS_BH(TCP_MIB_OUTRSTS);
1141 		return;
1142 	}
1143 
1144 	kfree_skb(buff);
1145 }
1146 
1147 static void tcp_v6_send_ack(struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 ts)
1148 {
1149 	struct tcphdr *th = skb->h.th, *t1;
1150 	struct sk_buff *buff;
1151 	struct flowi fl;
1152 	int tot_len = sizeof(struct tcphdr);
1153 
1154 	if (ts)
1155 		tot_len += 3*4;
1156 
1157 	buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
1158 			 GFP_ATOMIC);
1159 	if (buff == NULL)
1160 		return;
1161 
1162 	skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
1163 
1164 	t1 = (struct tcphdr *) skb_push(buff,tot_len);
1165 
1166 	/* Swap the send and the receive. */
1167 	memset(t1, 0, sizeof(*t1));
1168 	t1->dest = th->source;
1169 	t1->source = th->dest;
1170 	t1->doff = tot_len/4;
1171 	t1->seq = htonl(seq);
1172 	t1->ack_seq = htonl(ack);
1173 	t1->ack = 1;
1174 	t1->window = htons(win);
1175 
1176 	if (ts) {
1177 		u32 *ptr = (u32*)(t1 + 1);
1178 		*ptr++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
1179 			       (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
1180 		*ptr++ = htonl(tcp_time_stamp);
1181 		*ptr = htonl(ts);
1182 	}
1183 
1184 	buff->csum = csum_partial((char *)t1, tot_len, 0);
1185 
1186 	memset(&fl, 0, sizeof(fl));
1187 	ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr);
1188 	ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr);
1189 
1190 	t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
1191 				    tot_len, IPPROTO_TCP,
1192 				    buff->csum);
1193 
1194 	fl.proto = IPPROTO_TCP;
1195 	fl.oif = tcp_v6_iif(skb);
1196 	fl.fl_ip_dport = t1->dest;
1197 	fl.fl_ip_sport = t1->source;
1198 
1199 	if (!ip6_dst_lookup(NULL, &buff->dst, &fl)) {
1200 		if ((xfrm_lookup(&buff->dst, &fl, NULL, 0)) < 0) {
1201 			dst_release(buff->dst);
1202 			return;
1203 		}
1204 		ip6_xmit(NULL, buff, &fl, NULL, 0);
1205 		TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);
1206 		return;
1207 	}
1208 
1209 	kfree_skb(buff);
1210 }
1211 
1212 static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
1213 {
1214 	struct tcp_tw_bucket *tw = (struct tcp_tw_bucket *)sk;
1215 
1216 	tcp_v6_send_ack(skb, tw->tw_snd_nxt, tw->tw_rcv_nxt,
1217 			tw->tw_rcv_wnd >> tw->tw_rcv_wscale, tw->tw_ts_recent);
1218 
1219 	tcp_tw_put(tw);
1220 }
1221 
1222 static void tcp_v6_or_send_ack(struct sk_buff *skb, struct open_request *req)
1223 {
1224 	tcp_v6_send_ack(skb, req->snt_isn+1, req->rcv_isn+1, req->rcv_wnd, req->ts_recent);
1225 }
1226 
1227 
1228 static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)
1229 {
1230 	struct open_request *req, **prev;
1231 	struct tcphdr *th = skb->h.th;
1232 	struct tcp_sock *tp = tcp_sk(sk);
1233 	struct sock *nsk;
1234 
1235 	/* Find possible connection requests. */
1236 	req = tcp_v6_search_req(tp, &prev, th->source, &skb->nh.ipv6h->saddr,
1237 				&skb->nh.ipv6h->daddr, tcp_v6_iif(skb));
1238 	if (req)
1239 		return tcp_check_req(sk, skb, req, prev);
1240 
1241 	nsk = __tcp_v6_lookup_established(&skb->nh.ipv6h->saddr,
1242 					  th->source,
1243 					  &skb->nh.ipv6h->daddr,
1244 					  ntohs(th->dest),
1245 					  tcp_v6_iif(skb));
1246 
1247 	if (nsk) {
1248 		if (nsk->sk_state != TCP_TIME_WAIT) {
1249 			bh_lock_sock(nsk);
1250 			return nsk;
1251 		}
1252 		tcp_tw_put((struct tcp_tw_bucket*)nsk);
1253 		return NULL;
1254 	}
1255 
1256 #if 0 /*def CONFIG_SYN_COOKIES*/
1257 	if (!th->rst && !th->syn && th->ack)
1258 		sk = cookie_v6_check(sk, skb, &(IPCB(skb)->opt));
1259 #endif
1260 	return sk;
1261 }
1262 
1263 static void tcp_v6_synq_add(struct sock *sk, struct open_request *req)
1264 {
1265 	struct tcp_sock *tp = tcp_sk(sk);
1266 	struct tcp_listen_opt *lopt = tp->listen_opt;
1267 	u32 h = tcp_v6_synq_hash(&req->af.v6_req.rmt_addr, req->rmt_port, lopt->hash_rnd);
1268 
1269 	req->sk = NULL;
1270 	req->expires = jiffies + TCP_TIMEOUT_INIT;
1271 	req->retrans = 0;
1272 	req->dl_next = lopt->syn_table[h];
1273 
1274 	write_lock(&tp->syn_wait_lock);
1275 	lopt->syn_table[h] = req;
1276 	write_unlock(&tp->syn_wait_lock);
1277 
1278 	tcp_synq_added(sk);
1279 }
1280 
1281 
1282 /* FIXME: this is substantially similar to the ipv4 code.
1283  * Can some kind of merge be done? -- erics
1284  */
1285 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1286 {
1287 	struct ipv6_pinfo *np = inet6_sk(sk);
1288 	struct tcp_options_received tmp_opt;
1289 	struct tcp_sock *tp = tcp_sk(sk);
1290 	struct open_request *req = NULL;
1291 	__u32 isn = TCP_SKB_CB(skb)->when;
1292 
1293 	if (skb->protocol == htons(ETH_P_IP))
1294 		return tcp_v4_conn_request(sk, skb);
1295 
1296 	if (!ipv6_unicast_destination(skb))
1297 		goto drop;
1298 
1299 	/*
1300 	 *	There are no SYN attacks on IPv6, yet...
1301 	 */
1302 	if (tcp_synq_is_full(sk) && !isn) {
1303 		if (net_ratelimit())
1304 			printk(KERN_INFO "TCPv6: dropping request, synflood is possible\n");
1305 		goto drop;
1306 	}
1307 
1308 	if (sk_acceptq_is_full(sk) && tcp_synq_young(sk) > 1)
1309 		goto drop;
1310 
1311 	req = tcp_openreq_alloc();
1312 	if (req == NULL)
1313 		goto drop;
1314 
1315 	tcp_clear_options(&tmp_opt);
1316 	tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
1317 	tmp_opt.user_mss = tp->rx_opt.user_mss;
1318 
1319 	tcp_parse_options(skb, &tmp_opt, 0);
1320 
1321 	tmp_opt.tstamp_ok = tmp_opt.saw_tstamp;
1322 	tcp_openreq_init(req, &tmp_opt, skb);
1323 
1324 	req->class = &or_ipv6;
1325 	ipv6_addr_copy(&req->af.v6_req.rmt_addr, &skb->nh.ipv6h->saddr);
1326 	ipv6_addr_copy(&req->af.v6_req.loc_addr, &skb->nh.ipv6h->daddr);
1327 	TCP_ECN_create_request(req, skb->h.th);
1328 	req->af.v6_req.pktopts = NULL;
1329 	if (ipv6_opt_accepted(sk, skb) ||
1330 	    np->rxopt.bits.rxinfo ||
1331 	    np->rxopt.bits.rxhlim) {
1332 		atomic_inc(&skb->users);
1333 		req->af.v6_req.pktopts = skb;
1334 	}
1335 	req->af.v6_req.iif = sk->sk_bound_dev_if;
1336 
1337 	/* So that link locals have meaning */
1338 	if (!sk->sk_bound_dev_if &&
1339 	    ipv6_addr_type(&req->af.v6_req.rmt_addr) & IPV6_ADDR_LINKLOCAL)
1340 		req->af.v6_req.iif = tcp_v6_iif(skb);
1341 
1342 	if (isn == 0)
1343 		isn = tcp_v6_init_sequence(sk,skb);
1344 
1345 	req->snt_isn = isn;
1346 
1347 	if (tcp_v6_send_synack(sk, req, NULL))
1348 		goto drop;
1349 
1350 	tcp_v6_synq_add(sk, req);
1351 
1352 	return 0;
1353 
1354 drop:
1355 	if (req)
1356 		tcp_openreq_free(req);
1357 
1358 	TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
1359 	return 0; /* don't send reset */
1360 }
1361 
1362 static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
1363 					  struct open_request *req,
1364 					  struct dst_entry *dst)
1365 {
1366 	struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
1367 	struct tcp6_sock *newtcp6sk;
1368 	struct inet_sock *newinet;
1369 	struct tcp_sock *newtp;
1370 	struct sock *newsk;
1371 	struct ipv6_txoptions *opt;
1372 
1373 	if (skb->protocol == htons(ETH_P_IP)) {
1374 		/*
1375 		 *	v6 mapped
1376 		 */
1377 
1378 		newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst);
1379 
1380 		if (newsk == NULL)
1381 			return NULL;
1382 
1383 		newtcp6sk = (struct tcp6_sock *)newsk;
1384 		inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1385 
1386 		newinet = inet_sk(newsk);
1387 		newnp = inet6_sk(newsk);
1388 		newtp = tcp_sk(newsk);
1389 
1390 		memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1391 
1392 		ipv6_addr_set(&newnp->daddr, 0, 0, htonl(0x0000FFFF),
1393 			      newinet->daddr);
1394 
1395 		ipv6_addr_set(&newnp->saddr, 0, 0, htonl(0x0000FFFF),
1396 			      newinet->saddr);
1397 
1398 		ipv6_addr_copy(&newnp->rcv_saddr, &newnp->saddr);
1399 
1400 		newtp->af_specific = &ipv6_mapped;
1401 		newsk->sk_backlog_rcv = tcp_v4_do_rcv;
1402 		newnp->pktoptions  = NULL;
1403 		newnp->opt	   = NULL;
1404 		newnp->mcast_oif   = tcp_v6_iif(skb);
1405 		newnp->mcast_hops  = skb->nh.ipv6h->hop_limit;
1406 
1407 		/* Charge newly allocated IPv6 socket. Though it is mapped,
1408 		 * it is IPv6 yet.
1409 		 */
1410 #ifdef INET_REFCNT_DEBUG
1411 		atomic_inc(&inet6_sock_nr);
1412 #endif
1413 
1414 		/* It is tricky place. Until this moment IPv4 tcp
1415 		   worked with IPv6 af_tcp.af_specific.
1416 		   Sync it now.
1417 		 */
1418 		tcp_sync_mss(newsk, newtp->pmtu_cookie);
1419 
1420 		return newsk;
1421 	}
1422 
1423 	opt = np->opt;
1424 
1425 	if (sk_acceptq_is_full(sk))
1426 		goto out_overflow;
1427 
1428 	if (np->rxopt.bits.srcrt == 2 &&
1429 	    opt == NULL && req->af.v6_req.pktopts) {
1430 		struct inet6_skb_parm *rxopt = IP6CB(req->af.v6_req.pktopts);
1431 		if (rxopt->srcrt)
1432 			opt = ipv6_invert_rthdr(sk, (struct ipv6_rt_hdr*)(req->af.v6_req.pktopts->nh.raw+rxopt->srcrt));
1433 	}
1434 
1435 	if (dst == NULL) {
1436 		struct in6_addr *final_p = NULL, final;
1437 		struct flowi fl;
1438 
1439 		memset(&fl, 0, sizeof(fl));
1440 		fl.proto = IPPROTO_TCP;
1441 		ipv6_addr_copy(&fl.fl6_dst, &req->af.v6_req.rmt_addr);
1442 		if (opt && opt->srcrt) {
1443 			struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
1444 			ipv6_addr_copy(&final, &fl.fl6_dst);
1445 			ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
1446 			final_p = &final;
1447 		}
1448 		ipv6_addr_copy(&fl.fl6_src, &req->af.v6_req.loc_addr);
1449 		fl.oif = sk->sk_bound_dev_if;
1450 		fl.fl_ip_dport = req->rmt_port;
1451 		fl.fl_ip_sport = inet_sk(sk)->sport;
1452 
1453 		if (ip6_dst_lookup(sk, &dst, &fl))
1454 			goto out;
1455 
1456 		if (final_p)
1457 			ipv6_addr_copy(&fl.fl6_dst, final_p);
1458 
1459 		if ((xfrm_lookup(&dst, &fl, sk, 0)) < 0)
1460 			goto out;
1461 	}
1462 
1463 	newsk = tcp_create_openreq_child(sk, req, skb);
1464 	if (newsk == NULL)
1465 		goto out;
1466 
1467 	/* Charge newly allocated IPv6 socket */
1468 #ifdef INET_REFCNT_DEBUG
1469 	atomic_inc(&inet6_sock_nr);
1470 #endif
1471 
1472 	ip6_dst_store(newsk, dst, NULL);
1473 	newsk->sk_route_caps = dst->dev->features &
1474 		~(NETIF_F_IP_CSUM | NETIF_F_TSO);
1475 
1476 	newtcp6sk = (struct tcp6_sock *)newsk;
1477 	inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1478 
1479 	newtp = tcp_sk(newsk);
1480 	newinet = inet_sk(newsk);
1481 	newnp = inet6_sk(newsk);
1482 
1483 	memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1484 
1485 	ipv6_addr_copy(&newnp->daddr, &req->af.v6_req.rmt_addr);
1486 	ipv6_addr_copy(&newnp->saddr, &req->af.v6_req.loc_addr);
1487 	ipv6_addr_copy(&newnp->rcv_saddr, &req->af.v6_req.loc_addr);
1488 	newsk->sk_bound_dev_if = req->af.v6_req.iif;
1489 
1490 	/* Now IPv6 options...
1491 
1492 	   First: no IPv4 options.
1493 	 */
1494 	newinet->opt = NULL;
1495 
1496 	/* Clone RX bits */
1497 	newnp->rxopt.all = np->rxopt.all;
1498 
1499 	/* Clone pktoptions received with SYN */
1500 	newnp->pktoptions = NULL;
1501 	if (req->af.v6_req.pktopts) {
1502 		newnp->pktoptions = skb_clone(req->af.v6_req.pktopts,
1503 					      GFP_ATOMIC);
1504 		kfree_skb(req->af.v6_req.pktopts);
1505 		req->af.v6_req.pktopts = NULL;
1506 		if (newnp->pktoptions)
1507 			skb_set_owner_r(newnp->pktoptions, newsk);
1508 	}
1509 	newnp->opt	  = NULL;
1510 	newnp->mcast_oif  = tcp_v6_iif(skb);
1511 	newnp->mcast_hops = skb->nh.ipv6h->hop_limit;
1512 
1513 	/* Clone native IPv6 options from listening socket (if any)
1514 
1515 	   Yes, keeping reference count would be much more clever,
1516 	   but we make one more one thing there: reattach optmem
1517 	   to newsk.
1518 	 */
1519 	if (opt) {
1520 		newnp->opt = ipv6_dup_options(newsk, opt);
1521 		if (opt != np->opt)
1522 			sock_kfree_s(sk, opt, opt->tot_len);
1523 	}
1524 
1525 	newtp->ext_header_len = 0;
1526 	if (newnp->opt)
1527 		newtp->ext_header_len = newnp->opt->opt_nflen +
1528 					newnp->opt->opt_flen;
1529 
1530 	tcp_sync_mss(newsk, dst_mtu(dst));
1531 	newtp->advmss = dst_metric(dst, RTAX_ADVMSS);
1532 	tcp_initialize_rcv_mss(newsk);
1533 
1534 	newinet->daddr = newinet->saddr = newinet->rcv_saddr = LOOPBACK4_IPV6;
1535 
1536 	__tcp_v6_hash(newsk);
1537 	tcp_inherit_port(sk, newsk);
1538 
1539 	return newsk;
1540 
1541 out_overflow:
1542 	NET_INC_STATS_BH(LINUX_MIB_LISTENOVERFLOWS);
1543 out:
1544 	NET_INC_STATS_BH(LINUX_MIB_LISTENDROPS);
1545 	if (opt && opt != np->opt)
1546 		sock_kfree_s(sk, opt, opt->tot_len);
1547 	dst_release(dst);
1548 	return NULL;
1549 }
1550 
1551 static int tcp_v6_checksum_init(struct sk_buff *skb)
1552 {
1553 	if (skb->ip_summed == CHECKSUM_HW) {
1554 		skb->ip_summed = CHECKSUM_UNNECESSARY;
1555 		if (!tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
1556 				  &skb->nh.ipv6h->daddr,skb->csum))
1557 			return 0;
1558 		LIMIT_NETDEBUG(printk(KERN_DEBUG "hw tcp v6 csum failed\n"));
1559 	}
1560 	if (skb->len <= 76) {
1561 		if (tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
1562 				 &skb->nh.ipv6h->daddr,skb_checksum(skb, 0, skb->len, 0)))
1563 			return -1;
1564 		skb->ip_summed = CHECKSUM_UNNECESSARY;
1565 	} else {
1566 		skb->csum = ~tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,
1567 					  &skb->nh.ipv6h->daddr,0);
1568 	}
1569 	return 0;
1570 }
1571 
1572 /* The socket must have it's spinlock held when we get
1573  * here.
1574  *
1575  * We have a potential double-lock case here, so even when
1576  * doing backlog processing we use the BH locking scheme.
1577  * This is because we cannot sleep with the original spinlock
1578  * held.
1579  */
1580 static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1581 {
1582 	struct ipv6_pinfo *np = inet6_sk(sk);
1583 	struct tcp_sock *tp;
1584 	struct sk_buff *opt_skb = NULL;
1585 
1586 	/* Imagine: socket is IPv6. IPv4 packet arrives,
1587 	   goes to IPv4 receive handler and backlogged.
1588 	   From backlog it always goes here. Kerboom...
1589 	   Fortunately, tcp_rcv_established and rcv_established
1590 	   handle them correctly, but it is not case with
1591 	   tcp_v6_hnd_req and tcp_v6_send_reset().   --ANK
1592 	 */
1593 
1594 	if (skb->protocol == htons(ETH_P_IP))
1595 		return tcp_v4_do_rcv(sk, skb);
1596 
1597 	if (sk_filter(sk, skb, 0))
1598 		goto discard;
1599 
1600 	/*
1601 	 *	socket locking is here for SMP purposes as backlog rcv
1602 	 *	is currently called with bh processing disabled.
1603 	 */
1604 
1605 	/* Do Stevens' IPV6_PKTOPTIONS.
1606 
1607 	   Yes, guys, it is the only place in our code, where we
1608 	   may make it not affecting IPv4.
1609 	   The rest of code is protocol independent,
1610 	   and I do not like idea to uglify IPv4.
1611 
1612 	   Actually, all the idea behind IPV6_PKTOPTIONS
1613 	   looks not very well thought. For now we latch
1614 	   options, received in the last packet, enqueued
1615 	   by tcp. Feel free to propose better solution.
1616 	                                       --ANK (980728)
1617 	 */
1618 	if (np->rxopt.all)
1619 		opt_skb = skb_clone(skb, GFP_ATOMIC);
1620 
1621 	if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1622 		TCP_CHECK_TIMER(sk);
1623 		if (tcp_rcv_established(sk, skb, skb->h.th, skb->len))
1624 			goto reset;
1625 		TCP_CHECK_TIMER(sk);
1626 		if (opt_skb)
1627 			goto ipv6_pktoptions;
1628 		return 0;
1629 	}
1630 
1631 	if (skb->len < (skb->h.th->doff<<2) || tcp_checksum_complete(skb))
1632 		goto csum_err;
1633 
1634 	if (sk->sk_state == TCP_LISTEN) {
1635 		struct sock *nsk = tcp_v6_hnd_req(sk, skb);
1636 		if (!nsk)
1637 			goto discard;
1638 
1639 		/*
1640 		 * Queue it on the new socket if the new socket is active,
1641 		 * otherwise we just shortcircuit this and continue with
1642 		 * the new socket..
1643 		 */
1644  		if(nsk != sk) {
1645 			if (tcp_child_process(sk, nsk, skb))
1646 				goto reset;
1647 			if (opt_skb)
1648 				__kfree_skb(opt_skb);
1649 			return 0;
1650 		}
1651 	}
1652 
1653 	TCP_CHECK_TIMER(sk);
1654 	if (tcp_rcv_state_process(sk, skb, skb->h.th, skb->len))
1655 		goto reset;
1656 	TCP_CHECK_TIMER(sk);
1657 	if (opt_skb)
1658 		goto ipv6_pktoptions;
1659 	return 0;
1660 
1661 reset:
1662 	tcp_v6_send_reset(skb);
1663 discard:
1664 	if (opt_skb)
1665 		__kfree_skb(opt_skb);
1666 	kfree_skb(skb);
1667 	return 0;
1668 csum_err:
1669 	TCP_INC_STATS_BH(TCP_MIB_INERRS);
1670 	goto discard;
1671 
1672 
1673 ipv6_pktoptions:
1674 	/* Do you ask, what is it?
1675 
1676 	   1. skb was enqueued by tcp.
1677 	   2. skb is added to tail of read queue, rather than out of order.
1678 	   3. socket is not in passive state.
1679 	   4. Finally, it really contains options, which user wants to receive.
1680 	 */
1681 	tp = tcp_sk(sk);
1682 	if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1683 	    !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1684 		if (np->rxopt.bits.rxinfo)
1685 			np->mcast_oif = tcp_v6_iif(opt_skb);
1686 		if (np->rxopt.bits.rxhlim)
1687 			np->mcast_hops = opt_skb->nh.ipv6h->hop_limit;
1688 		if (ipv6_opt_accepted(sk, opt_skb)) {
1689 			skb_set_owner_r(opt_skb, sk);
1690 			opt_skb = xchg(&np->pktoptions, opt_skb);
1691 		} else {
1692 			__kfree_skb(opt_skb);
1693 			opt_skb = xchg(&np->pktoptions, NULL);
1694 		}
1695 	}
1696 
1697 	if (opt_skb)
1698 		kfree_skb(opt_skb);
1699 	return 0;
1700 }
1701 
1702 static int tcp_v6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
1703 {
1704 	struct sk_buff *skb = *pskb;
1705 	struct tcphdr *th;
1706 	struct sock *sk;
1707 	int ret;
1708 
1709 	if (skb->pkt_type != PACKET_HOST)
1710 		goto discard_it;
1711 
1712 	/*
1713 	 *	Count it even if it's bad.
1714 	 */
1715 	TCP_INC_STATS_BH(TCP_MIB_INSEGS);
1716 
1717 	if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1718 		goto discard_it;
1719 
1720 	th = skb->h.th;
1721 
1722 	if (th->doff < sizeof(struct tcphdr)/4)
1723 		goto bad_packet;
1724 	if (!pskb_may_pull(skb, th->doff*4))
1725 		goto discard_it;
1726 
1727 	if ((skb->ip_summed != CHECKSUM_UNNECESSARY &&
1728 	     tcp_v6_checksum_init(skb) < 0))
1729 		goto bad_packet;
1730 
1731 	th = skb->h.th;
1732 	TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1733 	TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1734 				    skb->len - th->doff*4);
1735 	TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1736 	TCP_SKB_CB(skb)->when = 0;
1737 	TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(skb->nh.ipv6h);
1738 	TCP_SKB_CB(skb)->sacked = 0;
1739 
1740 	sk = __tcp_v6_lookup(&skb->nh.ipv6h->saddr, th->source,
1741 			     &skb->nh.ipv6h->daddr, ntohs(th->dest), tcp_v6_iif(skb));
1742 
1743 	if (!sk)
1744 		goto no_tcp_socket;
1745 
1746 process:
1747 	if (sk->sk_state == TCP_TIME_WAIT)
1748 		goto do_time_wait;
1749 
1750 	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1751 		goto discard_and_relse;
1752 
1753 	if (sk_filter(sk, skb, 0))
1754 		goto discard_and_relse;
1755 
1756 	skb->dev = NULL;
1757 
1758 	bh_lock_sock(sk);
1759 	ret = 0;
1760 	if (!sock_owned_by_user(sk)) {
1761 		if (!tcp_prequeue(sk, skb))
1762 			ret = tcp_v6_do_rcv(sk, skb);
1763 	} else
1764 		sk_add_backlog(sk, skb);
1765 	bh_unlock_sock(sk);
1766 
1767 	sock_put(sk);
1768 	return ret ? -1 : 0;
1769 
1770 no_tcp_socket:
1771 	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1772 		goto discard_it;
1773 
1774 	if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1775 bad_packet:
1776 		TCP_INC_STATS_BH(TCP_MIB_INERRS);
1777 	} else {
1778 		tcp_v6_send_reset(skb);
1779 	}
1780 
1781 discard_it:
1782 
1783 	/*
1784 	 *	Discard frame
1785 	 */
1786 
1787 	kfree_skb(skb);
1788 	return 0;
1789 
1790 discard_and_relse:
1791 	sock_put(sk);
1792 	goto discard_it;
1793 
1794 do_time_wait:
1795 	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1796 		tcp_tw_put((struct tcp_tw_bucket *) sk);
1797 		goto discard_it;
1798 	}
1799 
1800 	if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1801 		TCP_INC_STATS_BH(TCP_MIB_INERRS);
1802 		tcp_tw_put((struct tcp_tw_bucket *) sk);
1803 		goto discard_it;
1804 	}
1805 
1806 	switch(tcp_timewait_state_process((struct tcp_tw_bucket *)sk,
1807 					  skb, th, skb->len)) {
1808 	case TCP_TW_SYN:
1809 	{
1810 		struct sock *sk2;
1811 
1812 		sk2 = tcp_v6_lookup_listener(&skb->nh.ipv6h->daddr, ntohs(th->dest), tcp_v6_iif(skb));
1813 		if (sk2 != NULL) {
1814 			tcp_tw_deschedule((struct tcp_tw_bucket *)sk);
1815 			tcp_tw_put((struct tcp_tw_bucket *)sk);
1816 			sk = sk2;
1817 			goto process;
1818 		}
1819 		/* Fall through to ACK */
1820 	}
1821 	case TCP_TW_ACK:
1822 		tcp_v6_timewait_ack(sk, skb);
1823 		break;
1824 	case TCP_TW_RST:
1825 		goto no_tcp_socket;
1826 	case TCP_TW_SUCCESS:;
1827 	}
1828 	goto discard_it;
1829 }
1830 
1831 static int tcp_v6_rebuild_header(struct sock *sk)
1832 {
1833 	int err;
1834 	struct dst_entry *dst;
1835 	struct ipv6_pinfo *np = inet6_sk(sk);
1836 
1837 	dst = __sk_dst_check(sk, np->dst_cookie);
1838 
1839 	if (dst == NULL) {
1840 		struct inet_sock *inet = inet_sk(sk);
1841 		struct in6_addr *final_p = NULL, final;
1842 		struct flowi fl;
1843 
1844 		memset(&fl, 0, sizeof(fl));
1845 		fl.proto = IPPROTO_TCP;
1846 		ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
1847 		ipv6_addr_copy(&fl.fl6_src, &np->saddr);
1848 		fl.fl6_flowlabel = np->flow_label;
1849 		fl.oif = sk->sk_bound_dev_if;
1850 		fl.fl_ip_dport = inet->dport;
1851 		fl.fl_ip_sport = inet->sport;
1852 
1853 		if (np->opt && np->opt->srcrt) {
1854 			struct rt0_hdr *rt0 = (struct rt0_hdr *) np->opt->srcrt;
1855 			ipv6_addr_copy(&final, &fl.fl6_dst);
1856 			ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
1857 			final_p = &final;
1858 		}
1859 
1860 		err = ip6_dst_lookup(sk, &dst, &fl);
1861 		if (err) {
1862 			sk->sk_route_caps = 0;
1863 			return err;
1864 		}
1865 		if (final_p)
1866 			ipv6_addr_copy(&fl.fl6_dst, final_p);
1867 
1868 		if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) {
1869 			sk->sk_err_soft = -err;
1870 			dst_release(dst);
1871 			return err;
1872 		}
1873 
1874 		ip6_dst_store(sk, dst, NULL);
1875 		sk->sk_route_caps = dst->dev->features &
1876 			~(NETIF_F_IP_CSUM | NETIF_F_TSO);
1877 	}
1878 
1879 	return 0;
1880 }
1881 
1882 static int tcp_v6_xmit(struct sk_buff *skb, int ipfragok)
1883 {
1884 	struct sock *sk = skb->sk;
1885 	struct inet_sock *inet = inet_sk(sk);
1886 	struct ipv6_pinfo *np = inet6_sk(sk);
1887 	struct flowi fl;
1888 	struct dst_entry *dst;
1889 	struct in6_addr *final_p = NULL, final;
1890 
1891 	memset(&fl, 0, sizeof(fl));
1892 	fl.proto = IPPROTO_TCP;
1893 	ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
1894 	ipv6_addr_copy(&fl.fl6_src, &np->saddr);
1895 	fl.fl6_flowlabel = np->flow_label;
1896 	IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel);
1897 	fl.oif = sk->sk_bound_dev_if;
1898 	fl.fl_ip_sport = inet->sport;
1899 	fl.fl_ip_dport = inet->dport;
1900 
1901 	if (np->opt && np->opt->srcrt) {
1902 		struct rt0_hdr *rt0 = (struct rt0_hdr *) np->opt->srcrt;
1903 		ipv6_addr_copy(&final, &fl.fl6_dst);
1904 		ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
1905 		final_p = &final;
1906 	}
1907 
1908 	dst = __sk_dst_check(sk, np->dst_cookie);
1909 
1910 	if (dst == NULL) {
1911 		int err = ip6_dst_lookup(sk, &dst, &fl);
1912 
1913 		if (err) {
1914 			sk->sk_err_soft = -err;
1915 			return err;
1916 		}
1917 
1918 		if (final_p)
1919 			ipv6_addr_copy(&fl.fl6_dst, final_p);
1920 
1921 		if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) {
1922 			sk->sk_route_caps = 0;
1923 			dst_release(dst);
1924 			return err;
1925 		}
1926 
1927 		ip6_dst_store(sk, dst, NULL);
1928 		sk->sk_route_caps = dst->dev->features &
1929 			~(NETIF_F_IP_CSUM | NETIF_F_TSO);
1930 	}
1931 
1932 	skb->dst = dst_clone(dst);
1933 
1934 	/* Restore final destination back after routing done */
1935 	ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
1936 
1937 	return ip6_xmit(sk, skb, &fl, np->opt, 0);
1938 }
1939 
1940 static void v6_addr2sockaddr(struct sock *sk, struct sockaddr * uaddr)
1941 {
1942 	struct ipv6_pinfo *np = inet6_sk(sk);
1943 	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) uaddr;
1944 
1945 	sin6->sin6_family = AF_INET6;
1946 	ipv6_addr_copy(&sin6->sin6_addr, &np->daddr);
1947 	sin6->sin6_port	= inet_sk(sk)->dport;
1948 	/* We do not store received flowlabel for TCP */
1949 	sin6->sin6_flowinfo = 0;
1950 	sin6->sin6_scope_id = 0;
1951 	if (sk->sk_bound_dev_if &&
1952 	    ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL)
1953 		sin6->sin6_scope_id = sk->sk_bound_dev_if;
1954 }
1955 
1956 static int tcp_v6_remember_stamp(struct sock *sk)
1957 {
1958 	/* Alas, not yet... */
1959 	return 0;
1960 }
1961 
1962 static struct tcp_func ipv6_specific = {
1963 	.queue_xmit	=	tcp_v6_xmit,
1964 	.send_check	=	tcp_v6_send_check,
1965 	.rebuild_header	=	tcp_v6_rebuild_header,
1966 	.conn_request	=	tcp_v6_conn_request,
1967 	.syn_recv_sock	=	tcp_v6_syn_recv_sock,
1968 	.remember_stamp	=	tcp_v6_remember_stamp,
1969 	.net_header_len	=	sizeof(struct ipv6hdr),
1970 
1971 	.setsockopt	=	ipv6_setsockopt,
1972 	.getsockopt	=	ipv6_getsockopt,
1973 	.addr2sockaddr	=	v6_addr2sockaddr,
1974 	.sockaddr_len	=	sizeof(struct sockaddr_in6)
1975 };
1976 
1977 /*
1978  *	TCP over IPv4 via INET6 API
1979  */
1980 
1981 static struct tcp_func ipv6_mapped = {
1982 	.queue_xmit	=	ip_queue_xmit,
1983 	.send_check	=	tcp_v4_send_check,
1984 	.rebuild_header	=	tcp_v4_rebuild_header,
1985 	.conn_request	=	tcp_v6_conn_request,
1986 	.syn_recv_sock	=	tcp_v6_syn_recv_sock,
1987 	.remember_stamp	=	tcp_v4_remember_stamp,
1988 	.net_header_len	=	sizeof(struct iphdr),
1989 
1990 	.setsockopt	=	ipv6_setsockopt,
1991 	.getsockopt	=	ipv6_getsockopt,
1992 	.addr2sockaddr	=	v6_addr2sockaddr,
1993 	.sockaddr_len	=	sizeof(struct sockaddr_in6)
1994 };
1995 
1996 
1997 
1998 /* NOTE: A lot of things set to zero explicitly by call to
1999  *       sk_alloc() so need not be done here.
2000  */
2001 static int tcp_v6_init_sock(struct sock *sk)
2002 {
2003 	struct tcp_sock *tp = tcp_sk(sk);
2004 
2005 	skb_queue_head_init(&tp->out_of_order_queue);
2006 	tcp_init_xmit_timers(sk);
2007 	tcp_prequeue_init(tp);
2008 
2009 	tp->rto  = TCP_TIMEOUT_INIT;
2010 	tp->mdev = TCP_TIMEOUT_INIT;
2011 
2012 	/* So many TCP implementations out there (incorrectly) count the
2013 	 * initial SYN frame in their delayed-ACK and congestion control
2014 	 * algorithms that we must have the following bandaid to talk
2015 	 * efficiently to them.  -DaveM
2016 	 */
2017 	tp->snd_cwnd = 2;
2018 
2019 	/* See draft-stevens-tcpca-spec-01 for discussion of the
2020 	 * initialization of these values.
2021 	 */
2022 	tp->snd_ssthresh = 0x7fffffff;
2023 	tp->snd_cwnd_clamp = ~0;
2024 	tp->mss_cache_std = tp->mss_cache = 536;
2025 
2026 	tp->reordering = sysctl_tcp_reordering;
2027 
2028 	sk->sk_state = TCP_CLOSE;
2029 
2030 	tp->af_specific = &ipv6_specific;
2031 
2032 	sk->sk_write_space = sk_stream_write_space;
2033 	sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
2034 
2035 	sk->sk_sndbuf = sysctl_tcp_wmem[1];
2036 	sk->sk_rcvbuf = sysctl_tcp_rmem[1];
2037 
2038 	atomic_inc(&tcp_sockets_allocated);
2039 
2040 	return 0;
2041 }
2042 
2043 static int tcp_v6_destroy_sock(struct sock *sk)
2044 {
2045 	extern int tcp_v4_destroy_sock(struct sock *sk);
2046 
2047 	tcp_v4_destroy_sock(sk);
2048 	return inet6_destroy_sock(sk);
2049 }
2050 
2051 /* Proc filesystem TCPv6 sock list dumping. */
2052 static void get_openreq6(struct seq_file *seq,
2053 			 struct sock *sk, struct open_request *req, int i, int uid)
2054 {
2055 	struct in6_addr *dest, *src;
2056 	int ttd = req->expires - jiffies;
2057 
2058 	if (ttd < 0)
2059 		ttd = 0;
2060 
2061 	src = &req->af.v6_req.loc_addr;
2062 	dest = &req->af.v6_req.rmt_addr;
2063 	seq_printf(seq,
2064 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2065 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
2066 		   i,
2067 		   src->s6_addr32[0], src->s6_addr32[1],
2068 		   src->s6_addr32[2], src->s6_addr32[3],
2069 		   ntohs(inet_sk(sk)->sport),
2070 		   dest->s6_addr32[0], dest->s6_addr32[1],
2071 		   dest->s6_addr32[2], dest->s6_addr32[3],
2072 		   ntohs(req->rmt_port),
2073 		   TCP_SYN_RECV,
2074 		   0,0, /* could print option size, but that is af dependent. */
2075 		   1,   /* timers active (only the expire timer) */
2076 		   jiffies_to_clock_t(ttd),
2077 		   req->retrans,
2078 		   uid,
2079 		   0,  /* non standard timer */
2080 		   0, /* open_requests have no inode */
2081 		   0, req);
2082 }
2083 
2084 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
2085 {
2086 	struct in6_addr *dest, *src;
2087 	__u16 destp, srcp;
2088 	int timer_active;
2089 	unsigned long timer_expires;
2090 	struct inet_sock *inet = inet_sk(sp);
2091 	struct tcp_sock *tp = tcp_sk(sp);
2092 	struct ipv6_pinfo *np = inet6_sk(sp);
2093 
2094 	dest  = &np->daddr;
2095 	src   = &np->rcv_saddr;
2096 	destp = ntohs(inet->dport);
2097 	srcp  = ntohs(inet->sport);
2098 	if (tp->pending == TCP_TIME_RETRANS) {
2099 		timer_active	= 1;
2100 		timer_expires	= tp->timeout;
2101 	} else if (tp->pending == TCP_TIME_PROBE0) {
2102 		timer_active	= 4;
2103 		timer_expires	= tp->timeout;
2104 	} else if (timer_pending(&sp->sk_timer)) {
2105 		timer_active	= 2;
2106 		timer_expires	= sp->sk_timer.expires;
2107 	} else {
2108 		timer_active	= 0;
2109 		timer_expires = jiffies;
2110 	}
2111 
2112 	seq_printf(seq,
2113 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2114 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %u %u %u %u %d\n",
2115 		   i,
2116 		   src->s6_addr32[0], src->s6_addr32[1],
2117 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
2118 		   dest->s6_addr32[0], dest->s6_addr32[1],
2119 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
2120 		   sp->sk_state,
2121 		   tp->write_seq-tp->snd_una, tp->rcv_nxt-tp->copied_seq,
2122 		   timer_active,
2123 		   jiffies_to_clock_t(timer_expires - jiffies),
2124 		   tp->retransmits,
2125 		   sock_i_uid(sp),
2126 		   tp->probes_out,
2127 		   sock_i_ino(sp),
2128 		   atomic_read(&sp->sk_refcnt), sp,
2129 		   tp->rto, tp->ack.ato, (tp->ack.quick<<1)|tp->ack.pingpong,
2130 		   tp->snd_cwnd, tp->snd_ssthresh>=0xFFFF?-1:tp->snd_ssthresh
2131 		   );
2132 }
2133 
2134 static void get_timewait6_sock(struct seq_file *seq,
2135 			       struct tcp_tw_bucket *tw, int i)
2136 {
2137 	struct in6_addr *dest, *src;
2138 	__u16 destp, srcp;
2139 	int ttd = tw->tw_ttd - jiffies;
2140 
2141 	if (ttd < 0)
2142 		ttd = 0;
2143 
2144 	dest  = &tw->tw_v6_daddr;
2145 	src   = &tw->tw_v6_rcv_saddr;
2146 	destp = ntohs(tw->tw_dport);
2147 	srcp  = ntohs(tw->tw_sport);
2148 
2149 	seq_printf(seq,
2150 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2151 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
2152 		   i,
2153 		   src->s6_addr32[0], src->s6_addr32[1],
2154 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
2155 		   dest->s6_addr32[0], dest->s6_addr32[1],
2156 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
2157 		   tw->tw_substate, 0, 0,
2158 		   3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
2159 		   atomic_read(&tw->tw_refcnt), tw);
2160 }
2161 
2162 #ifdef CONFIG_PROC_FS
2163 static int tcp6_seq_show(struct seq_file *seq, void *v)
2164 {
2165 	struct tcp_iter_state *st;
2166 
2167 	if (v == SEQ_START_TOKEN) {
2168 		seq_puts(seq,
2169 			 "  sl  "
2170 			 "local_address                         "
2171 			 "remote_address                        "
2172 			 "st tx_queue rx_queue tr tm->when retrnsmt"
2173 			 "   uid  timeout inode\n");
2174 		goto out;
2175 	}
2176 	st = seq->private;
2177 
2178 	switch (st->state) {
2179 	case TCP_SEQ_STATE_LISTENING:
2180 	case TCP_SEQ_STATE_ESTABLISHED:
2181 		get_tcp6_sock(seq, v, st->num);
2182 		break;
2183 	case TCP_SEQ_STATE_OPENREQ:
2184 		get_openreq6(seq, st->syn_wait_sk, v, st->num, st->uid);
2185 		break;
2186 	case TCP_SEQ_STATE_TIME_WAIT:
2187 		get_timewait6_sock(seq, v, st->num);
2188 		break;
2189 	}
2190 out:
2191 	return 0;
2192 }
2193 
2194 static struct file_operations tcp6_seq_fops;
2195 static struct tcp_seq_afinfo tcp6_seq_afinfo = {
2196 	.owner		= THIS_MODULE,
2197 	.name		= "tcp6",
2198 	.family		= AF_INET6,
2199 	.seq_show	= tcp6_seq_show,
2200 	.seq_fops	= &tcp6_seq_fops,
2201 };
2202 
2203 int __init tcp6_proc_init(void)
2204 {
2205 	return tcp_proc_register(&tcp6_seq_afinfo);
2206 }
2207 
2208 void tcp6_proc_exit(void)
2209 {
2210 	tcp_proc_unregister(&tcp6_seq_afinfo);
2211 }
2212 #endif
2213 
2214 struct proto tcpv6_prot = {
2215 	.name			= "TCPv6",
2216 	.owner			= THIS_MODULE,
2217 	.close			= tcp_close,
2218 	.connect		= tcp_v6_connect,
2219 	.disconnect		= tcp_disconnect,
2220 	.accept			= tcp_accept,
2221 	.ioctl			= tcp_ioctl,
2222 	.init			= tcp_v6_init_sock,
2223 	.destroy		= tcp_v6_destroy_sock,
2224 	.shutdown		= tcp_shutdown,
2225 	.setsockopt		= tcp_setsockopt,
2226 	.getsockopt		= tcp_getsockopt,
2227 	.sendmsg		= tcp_sendmsg,
2228 	.recvmsg		= tcp_recvmsg,
2229 	.backlog_rcv		= tcp_v6_do_rcv,
2230 	.hash			= tcp_v6_hash,
2231 	.unhash			= tcp_unhash,
2232 	.get_port		= tcp_v6_get_port,
2233 	.enter_memory_pressure	= tcp_enter_memory_pressure,
2234 	.sockets_allocated	= &tcp_sockets_allocated,
2235 	.memory_allocated	= &tcp_memory_allocated,
2236 	.memory_pressure	= &tcp_memory_pressure,
2237 	.sysctl_mem		= sysctl_tcp_mem,
2238 	.sysctl_wmem		= sysctl_tcp_wmem,
2239 	.sysctl_rmem		= sysctl_tcp_rmem,
2240 	.max_header		= MAX_TCP_HEADER,
2241 	.obj_size		= sizeof(struct tcp6_sock),
2242 };
2243 
2244 static struct inet6_protocol tcpv6_protocol = {
2245 	.handler	=	tcp_v6_rcv,
2246 	.err_handler	=	tcp_v6_err,
2247 	.flags		=	INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
2248 };
2249 
2250 extern struct proto_ops inet6_stream_ops;
2251 
2252 static struct inet_protosw tcpv6_protosw = {
2253 	.type		=	SOCK_STREAM,
2254 	.protocol	=	IPPROTO_TCP,
2255 	.prot		=	&tcpv6_prot,
2256 	.ops		=	&inet6_stream_ops,
2257 	.capability	=	-1,
2258 	.no_check	=	0,
2259 	.flags		=	INET_PROTOSW_PERMANENT,
2260 };
2261 
2262 void __init tcpv6_init(void)
2263 {
2264 	/* register inet6 protocol */
2265 	if (inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP) < 0)
2266 		printk(KERN_ERR "tcpv6_init: Could not register protocol\n");
2267 	inet6_register_protosw(&tcpv6_protosw);
2268 }
2269