xref: /linux/net/ipv6/tcp_ipv6.c (revision 4b2a108cd0d34880fe9d932258ca5b2ccebcd05e)
1 /*
2  *	TCP over IPv6
3  *	Linux INET6 implementation
4  *
5  *	Authors:
6  *	Pedro Roque		<roque@di.fc.ul.pt>
7  *
8  *	Based on:
9  *	linux/net/ipv4/tcp.c
10  *	linux/net/ipv4/tcp_input.c
11  *	linux/net/ipv4/tcp_output.c
12  *
13  *	Fixes:
14  *	Hideaki YOSHIFUJI	:	sin6_scope_id support
15  *	YOSHIFUJI Hideaki @USAGI and:	Support IPV6_V6ONLY socket option, which
16  *	Alexey Kuznetsov		allow both IPv4 and IPv6 sockets to bind
17  *					a single port at the same time.
18  *	YOSHIFUJI Hideaki @USAGI:	convert /proc/net/tcp6 to seq_file.
19  *
20  *	This program is free software; you can redistribute it and/or
21  *      modify it under the terms of the GNU General Public License
22  *      as published by the Free Software Foundation; either version
23  *      2 of the License, or (at your option) any later version.
24  */
25 
26 #include <linux/bottom_half.h>
27 #include <linux/module.h>
28 #include <linux/errno.h>
29 #include <linux/types.h>
30 #include <linux/socket.h>
31 #include <linux/sockios.h>
32 #include <linux/net.h>
33 #include <linux/jiffies.h>
34 #include <linux/in.h>
35 #include <linux/in6.h>
36 #include <linux/netdevice.h>
37 #include <linux/init.h>
38 #include <linux/jhash.h>
39 #include <linux/ipsec.h>
40 #include <linux/times.h>
41 
42 #include <linux/ipv6.h>
43 #include <linux/icmpv6.h>
44 #include <linux/random.h>
45 
46 #include <net/tcp.h>
47 #include <net/ndisc.h>
48 #include <net/inet6_hashtables.h>
49 #include <net/inet6_connection_sock.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/snmp.h>
59 #include <net/dsfield.h>
60 #include <net/timewait_sock.h>
61 #include <net/netdma.h>
62 #include <net/inet_common.h>
63 
64 #include <asm/uaccess.h>
65 
66 #include <linux/proc_fs.h>
67 #include <linux/seq_file.h>
68 
69 #include <linux/crypto.h>
70 #include <linux/scatterlist.h>
71 
72 static void	tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb);
73 static void	tcp_v6_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
74 				      struct request_sock *req);
75 
76 static int	tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
77 
78 static struct inet_connection_sock_af_ops ipv6_mapped;
79 static struct inet_connection_sock_af_ops ipv6_specific;
80 #ifdef CONFIG_TCP_MD5SIG
81 static struct tcp_sock_af_ops tcp_sock_ipv6_specific;
82 static struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific;
83 #else
84 static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(struct sock *sk,
85 						   struct in6_addr *addr)
86 {
87 	return NULL;
88 }
89 #endif
90 
91 static void tcp_v6_hash(struct sock *sk)
92 {
93 	if (sk->sk_state != TCP_CLOSE) {
94 		if (inet_csk(sk)->icsk_af_ops == &ipv6_mapped) {
95 			tcp_prot.hash(sk);
96 			return;
97 		}
98 		local_bh_disable();
99 		__inet6_hash(sk);
100 		local_bh_enable();
101 	}
102 }
103 
104 static __inline__ __sum16 tcp_v6_check(int len,
105 				   struct in6_addr *saddr,
106 				   struct in6_addr *daddr,
107 				   __wsum base)
108 {
109 	return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base);
110 }
111 
112 static __u32 tcp_v6_init_sequence(struct sk_buff *skb)
113 {
114 	return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32,
115 					    ipv6_hdr(skb)->saddr.s6_addr32,
116 					    tcp_hdr(skb)->dest,
117 					    tcp_hdr(skb)->source);
118 }
119 
120 static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
121 			  int addr_len)
122 {
123 	struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
124 	struct inet_sock *inet = inet_sk(sk);
125 	struct inet_connection_sock *icsk = inet_csk(sk);
126 	struct ipv6_pinfo *np = inet6_sk(sk);
127 	struct tcp_sock *tp = tcp_sk(sk);
128 	struct in6_addr *saddr = NULL, *final_p = NULL, final;
129 	struct flowi fl;
130 	struct dst_entry *dst;
131 	int addr_type;
132 	int err;
133 
134 	if (addr_len < SIN6_LEN_RFC2133)
135 		return -EINVAL;
136 
137 	if (usin->sin6_family != AF_INET6)
138 		return(-EAFNOSUPPORT);
139 
140 	memset(&fl, 0, sizeof(fl));
141 
142 	if (np->sndflow) {
143 		fl.fl6_flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
144 		IP6_ECN_flow_init(fl.fl6_flowlabel);
145 		if (fl.fl6_flowlabel&IPV6_FLOWLABEL_MASK) {
146 			struct ip6_flowlabel *flowlabel;
147 			flowlabel = fl6_sock_lookup(sk, fl.fl6_flowlabel);
148 			if (flowlabel == NULL)
149 				return -EINVAL;
150 			ipv6_addr_copy(&usin->sin6_addr, &flowlabel->dst);
151 			fl6_sock_release(flowlabel);
152 		}
153 	}
154 
155 	/*
156 	 *	connect() to INADDR_ANY means loopback (BSD'ism).
157 	 */
158 
159 	if(ipv6_addr_any(&usin->sin6_addr))
160 		usin->sin6_addr.s6_addr[15] = 0x1;
161 
162 	addr_type = ipv6_addr_type(&usin->sin6_addr);
163 
164 	if(addr_type & IPV6_ADDR_MULTICAST)
165 		return -ENETUNREACH;
166 
167 	if (addr_type&IPV6_ADDR_LINKLOCAL) {
168 		if (addr_len >= sizeof(struct sockaddr_in6) &&
169 		    usin->sin6_scope_id) {
170 			/* If interface is set while binding, indices
171 			 * must coincide.
172 			 */
173 			if (sk->sk_bound_dev_if &&
174 			    sk->sk_bound_dev_if != usin->sin6_scope_id)
175 				return -EINVAL;
176 
177 			sk->sk_bound_dev_if = usin->sin6_scope_id;
178 		}
179 
180 		/* Connect to link-local address requires an interface */
181 		if (!sk->sk_bound_dev_if)
182 			return -EINVAL;
183 	}
184 
185 	if (tp->rx_opt.ts_recent_stamp &&
186 	    !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) {
187 		tp->rx_opt.ts_recent = 0;
188 		tp->rx_opt.ts_recent_stamp = 0;
189 		tp->write_seq = 0;
190 	}
191 
192 	ipv6_addr_copy(&np->daddr, &usin->sin6_addr);
193 	np->flow_label = fl.fl6_flowlabel;
194 
195 	/*
196 	 *	TCP over IPv4
197 	 */
198 
199 	if (addr_type == IPV6_ADDR_MAPPED) {
200 		u32 exthdrlen = icsk->icsk_ext_hdr_len;
201 		struct sockaddr_in sin;
202 
203 		SOCK_DEBUG(sk, "connect: ipv4 mapped\n");
204 
205 		if (__ipv6_only_sock(sk))
206 			return -ENETUNREACH;
207 
208 		sin.sin_family = AF_INET;
209 		sin.sin_port = usin->sin6_port;
210 		sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3];
211 
212 		icsk->icsk_af_ops = &ipv6_mapped;
213 		sk->sk_backlog_rcv = tcp_v4_do_rcv;
214 #ifdef CONFIG_TCP_MD5SIG
215 		tp->af_specific = &tcp_sock_ipv6_mapped_specific;
216 #endif
217 
218 		err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
219 
220 		if (err) {
221 			icsk->icsk_ext_hdr_len = exthdrlen;
222 			icsk->icsk_af_ops = &ipv6_specific;
223 			sk->sk_backlog_rcv = tcp_v6_do_rcv;
224 #ifdef CONFIG_TCP_MD5SIG
225 			tp->af_specific = &tcp_sock_ipv6_specific;
226 #endif
227 			goto failure;
228 		} else {
229 			ipv6_addr_set(&np->saddr, 0, 0, htonl(0x0000FFFF),
230 				      inet->saddr);
231 			ipv6_addr_set(&np->rcv_saddr, 0, 0, htonl(0x0000FFFF),
232 				      inet->rcv_saddr);
233 		}
234 
235 		return err;
236 	}
237 
238 	if (!ipv6_addr_any(&np->rcv_saddr))
239 		saddr = &np->rcv_saddr;
240 
241 	fl.proto = IPPROTO_TCP;
242 	ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
243 	ipv6_addr_copy(&fl.fl6_src,
244 		       (saddr ? saddr : &np->saddr));
245 	fl.oif = sk->sk_bound_dev_if;
246 	fl.fl_ip_dport = usin->sin6_port;
247 	fl.fl_ip_sport = inet->sport;
248 
249 	if (np->opt && np->opt->srcrt) {
250 		struct rt0_hdr *rt0 = (struct rt0_hdr *)np->opt->srcrt;
251 		ipv6_addr_copy(&final, &fl.fl6_dst);
252 		ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
253 		final_p = &final;
254 	}
255 
256 	security_sk_classify_flow(sk, &fl);
257 
258 	err = ip6_dst_lookup(sk, &dst, &fl);
259 	if (err)
260 		goto failure;
261 	if (final_p)
262 		ipv6_addr_copy(&fl.fl6_dst, final_p);
263 
264 	err = __xfrm_lookup(sock_net(sk), &dst, &fl, sk, XFRM_LOOKUP_WAIT);
265 	if (err < 0) {
266 		if (err == -EREMOTE)
267 			err = ip6_dst_blackhole(sk, &dst, &fl);
268 		if (err < 0)
269 			goto failure;
270 	}
271 
272 	if (saddr == NULL) {
273 		saddr = &fl.fl6_src;
274 		ipv6_addr_copy(&np->rcv_saddr, saddr);
275 	}
276 
277 	/* set the source address */
278 	ipv6_addr_copy(&np->saddr, saddr);
279 	inet->rcv_saddr = LOOPBACK4_IPV6;
280 
281 	sk->sk_gso_type = SKB_GSO_TCPV6;
282 	__ip6_dst_store(sk, dst, NULL, NULL);
283 
284 	icsk->icsk_ext_hdr_len = 0;
285 	if (np->opt)
286 		icsk->icsk_ext_hdr_len = (np->opt->opt_flen +
287 					  np->opt->opt_nflen);
288 
289 	tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
290 
291 	inet->dport = usin->sin6_port;
292 
293 	tcp_set_state(sk, TCP_SYN_SENT);
294 	err = inet6_hash_connect(&tcp_death_row, sk);
295 	if (err)
296 		goto late_failure;
297 
298 	if (!tp->write_seq)
299 		tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
300 							     np->daddr.s6_addr32,
301 							     inet->sport,
302 							     inet->dport);
303 
304 	err = tcp_connect(sk);
305 	if (err)
306 		goto late_failure;
307 
308 	return 0;
309 
310 late_failure:
311 	tcp_set_state(sk, TCP_CLOSE);
312 	__sk_dst_reset(sk);
313 failure:
314 	inet->dport = 0;
315 	sk->sk_route_caps = 0;
316 	return err;
317 }
318 
319 static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
320 		u8 type, u8 code, int offset, __be32 info)
321 {
322 	struct ipv6hdr *hdr = (struct ipv6hdr*)skb->data;
323 	const struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
324 	struct ipv6_pinfo *np;
325 	struct sock *sk;
326 	int err;
327 	struct tcp_sock *tp;
328 	__u32 seq;
329 	struct net *net = dev_net(skb->dev);
330 
331 	sk = inet6_lookup(net, &tcp_hashinfo, &hdr->daddr,
332 			th->dest, &hdr->saddr, th->source, skb->dev->ifindex);
333 
334 	if (sk == NULL) {
335 		ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev),
336 				   ICMP6_MIB_INERRORS);
337 		return;
338 	}
339 
340 	if (sk->sk_state == TCP_TIME_WAIT) {
341 		inet_twsk_put(inet_twsk(sk));
342 		return;
343 	}
344 
345 	bh_lock_sock(sk);
346 	if (sock_owned_by_user(sk))
347 		NET_INC_STATS_BH(net, LINUX_MIB_LOCKDROPPEDICMPS);
348 
349 	if (sk->sk_state == TCP_CLOSE)
350 		goto out;
351 
352 	tp = tcp_sk(sk);
353 	seq = ntohl(th->seq);
354 	if (sk->sk_state != TCP_LISTEN &&
355 	    !between(seq, tp->snd_una, tp->snd_nxt)) {
356 		NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
357 		goto out;
358 	}
359 
360 	np = inet6_sk(sk);
361 
362 	if (type == ICMPV6_PKT_TOOBIG) {
363 		struct dst_entry *dst = NULL;
364 
365 		if (sock_owned_by_user(sk))
366 			goto out;
367 		if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
368 			goto out;
369 
370 		/* icmp should have updated the destination cache entry */
371 		dst = __sk_dst_check(sk, np->dst_cookie);
372 
373 		if (dst == NULL) {
374 			struct inet_sock *inet = inet_sk(sk);
375 			struct flowi fl;
376 
377 			/* BUGGG_FUTURE: Again, it is not clear how
378 			   to handle rthdr case. Ignore this complexity
379 			   for now.
380 			 */
381 			memset(&fl, 0, sizeof(fl));
382 			fl.proto = IPPROTO_TCP;
383 			ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
384 			ipv6_addr_copy(&fl.fl6_src, &np->saddr);
385 			fl.oif = sk->sk_bound_dev_if;
386 			fl.fl_ip_dport = inet->dport;
387 			fl.fl_ip_sport = inet->sport;
388 			security_skb_classify_flow(skb, &fl);
389 
390 			if ((err = ip6_dst_lookup(sk, &dst, &fl))) {
391 				sk->sk_err_soft = -err;
392 				goto out;
393 			}
394 
395 			if ((err = xfrm_lookup(net, &dst, &fl, sk, 0)) < 0) {
396 				sk->sk_err_soft = -err;
397 				goto out;
398 			}
399 
400 		} else
401 			dst_hold(dst);
402 
403 		if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) {
404 			tcp_sync_mss(sk, dst_mtu(dst));
405 			tcp_simple_retransmit(sk);
406 		} /* else let the usual retransmit timer handle it */
407 		dst_release(dst);
408 		goto out;
409 	}
410 
411 	icmpv6_err_convert(type, code, &err);
412 
413 	/* Might be for an request_sock */
414 	switch (sk->sk_state) {
415 		struct request_sock *req, **prev;
416 	case TCP_LISTEN:
417 		if (sock_owned_by_user(sk))
418 			goto out;
419 
420 		req = inet6_csk_search_req(sk, &prev, th->dest, &hdr->daddr,
421 					   &hdr->saddr, inet6_iif(skb));
422 		if (!req)
423 			goto out;
424 
425 		/* ICMPs are not backlogged, hence we cannot get
426 		 * an established socket here.
427 		 */
428 		WARN_ON(req->sk != NULL);
429 
430 		if (seq != tcp_rsk(req)->snt_isn) {
431 			NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
432 			goto out;
433 		}
434 
435 		inet_csk_reqsk_queue_drop(sk, req, prev);
436 		goto out;
437 
438 	case TCP_SYN_SENT:
439 	case TCP_SYN_RECV:  /* Cannot happen.
440 			       It can, it SYNs are crossed. --ANK */
441 		if (!sock_owned_by_user(sk)) {
442 			sk->sk_err = err;
443 			sk->sk_error_report(sk);		/* Wake people up to see the error (see connect in sock.c) */
444 
445 			tcp_done(sk);
446 		} else
447 			sk->sk_err_soft = err;
448 		goto out;
449 	}
450 
451 	if (!sock_owned_by_user(sk) && np->recverr) {
452 		sk->sk_err = err;
453 		sk->sk_error_report(sk);
454 	} else
455 		sk->sk_err_soft = err;
456 
457 out:
458 	bh_unlock_sock(sk);
459 	sock_put(sk);
460 }
461 
462 
463 static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req)
464 {
465 	struct inet6_request_sock *treq = inet6_rsk(req);
466 	struct ipv6_pinfo *np = inet6_sk(sk);
467 	struct sk_buff * skb;
468 	struct ipv6_txoptions *opt = NULL;
469 	struct in6_addr * final_p = NULL, final;
470 	struct flowi fl;
471 	struct dst_entry *dst;
472 	int err = -1;
473 
474 	memset(&fl, 0, sizeof(fl));
475 	fl.proto = IPPROTO_TCP;
476 	ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
477 	ipv6_addr_copy(&fl.fl6_src, &treq->loc_addr);
478 	fl.fl6_flowlabel = 0;
479 	fl.oif = treq->iif;
480 	fl.fl_ip_dport = inet_rsk(req)->rmt_port;
481 	fl.fl_ip_sport = inet_rsk(req)->loc_port;
482 	security_req_classify_flow(req, &fl);
483 
484 	opt = np->opt;
485 	if (opt && opt->srcrt) {
486 		struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
487 		ipv6_addr_copy(&final, &fl.fl6_dst);
488 		ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
489 		final_p = &final;
490 	}
491 
492 	err = ip6_dst_lookup(sk, &dst, &fl);
493 	if (err)
494 		goto done;
495 	if (final_p)
496 		ipv6_addr_copy(&fl.fl6_dst, final_p);
497 	if ((err = xfrm_lookup(sock_net(sk), &dst, &fl, sk, 0)) < 0)
498 		goto done;
499 
500 	skb = tcp_make_synack(sk, dst, req);
501 	if (skb) {
502 		struct tcphdr *th = tcp_hdr(skb);
503 
504 		th->check = tcp_v6_check(skb->len,
505 					 &treq->loc_addr, &treq->rmt_addr,
506 					 csum_partial(th, skb->len, skb->csum));
507 
508 		ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
509 		err = ip6_xmit(sk, skb, &fl, opt, 0);
510 		err = net_xmit_eval(err);
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 inline void syn_flood_warning(struct sk_buff *skb)
521 {
522 #ifdef CONFIG_SYN_COOKIES
523 	if (sysctl_tcp_syncookies)
524 		printk(KERN_INFO
525 		       "TCPv6: Possible SYN flooding on port %d. "
526 		       "Sending cookies.\n", ntohs(tcp_hdr(skb)->dest));
527 	else
528 #endif
529 		printk(KERN_INFO
530 		       "TCPv6: Possible SYN flooding on port %d. "
531 		       "Dropping request.\n", ntohs(tcp_hdr(skb)->dest));
532 }
533 
534 static void tcp_v6_reqsk_destructor(struct request_sock *req)
535 {
536 	kfree_skb(inet6_rsk(req)->pktopts);
537 }
538 
539 #ifdef CONFIG_TCP_MD5SIG
540 static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(struct sock *sk,
541 						   struct in6_addr *addr)
542 {
543 	struct tcp_sock *tp = tcp_sk(sk);
544 	int i;
545 
546 	BUG_ON(tp == NULL);
547 
548 	if (!tp->md5sig_info || !tp->md5sig_info->entries6)
549 		return NULL;
550 
551 	for (i = 0; i < tp->md5sig_info->entries6; i++) {
552 		if (ipv6_addr_equal(&tp->md5sig_info->keys6[i].addr, addr))
553 			return &tp->md5sig_info->keys6[i].base;
554 	}
555 	return NULL;
556 }
557 
558 static struct tcp_md5sig_key *tcp_v6_md5_lookup(struct sock *sk,
559 						struct sock *addr_sk)
560 {
561 	return tcp_v6_md5_do_lookup(sk, &inet6_sk(addr_sk)->daddr);
562 }
563 
564 static struct tcp_md5sig_key *tcp_v6_reqsk_md5_lookup(struct sock *sk,
565 						      struct request_sock *req)
566 {
567 	return tcp_v6_md5_do_lookup(sk, &inet6_rsk(req)->rmt_addr);
568 }
569 
570 static int tcp_v6_md5_do_add(struct sock *sk, struct in6_addr *peer,
571 			     char *newkey, u8 newkeylen)
572 {
573 	/* Add key to the list */
574 	struct tcp_md5sig_key *key;
575 	struct tcp_sock *tp = tcp_sk(sk);
576 	struct tcp6_md5sig_key *keys;
577 
578 	key = tcp_v6_md5_do_lookup(sk, peer);
579 	if (key) {
580 		/* modify existing entry - just update that one */
581 		kfree(key->key);
582 		key->key = newkey;
583 		key->keylen = newkeylen;
584 	} else {
585 		/* reallocate new list if current one is full. */
586 		if (!tp->md5sig_info) {
587 			tp->md5sig_info = kzalloc(sizeof(*tp->md5sig_info), GFP_ATOMIC);
588 			if (!tp->md5sig_info) {
589 				kfree(newkey);
590 				return -ENOMEM;
591 			}
592 			sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
593 		}
594 		if (tcp_alloc_md5sig_pool() == NULL) {
595 			kfree(newkey);
596 			return -ENOMEM;
597 		}
598 		if (tp->md5sig_info->alloced6 == tp->md5sig_info->entries6) {
599 			keys = kmalloc((sizeof (tp->md5sig_info->keys6[0]) *
600 				       (tp->md5sig_info->entries6 + 1)), GFP_ATOMIC);
601 
602 			if (!keys) {
603 				tcp_free_md5sig_pool();
604 				kfree(newkey);
605 				return -ENOMEM;
606 			}
607 
608 			if (tp->md5sig_info->entries6)
609 				memmove(keys, tp->md5sig_info->keys6,
610 					(sizeof (tp->md5sig_info->keys6[0]) *
611 					 tp->md5sig_info->entries6));
612 
613 			kfree(tp->md5sig_info->keys6);
614 			tp->md5sig_info->keys6 = keys;
615 			tp->md5sig_info->alloced6++;
616 		}
617 
618 		ipv6_addr_copy(&tp->md5sig_info->keys6[tp->md5sig_info->entries6].addr,
619 			       peer);
620 		tp->md5sig_info->keys6[tp->md5sig_info->entries6].base.key = newkey;
621 		tp->md5sig_info->keys6[tp->md5sig_info->entries6].base.keylen = newkeylen;
622 
623 		tp->md5sig_info->entries6++;
624 	}
625 	return 0;
626 }
627 
628 static int tcp_v6_md5_add_func(struct sock *sk, struct sock *addr_sk,
629 			       u8 *newkey, __u8 newkeylen)
630 {
631 	return tcp_v6_md5_do_add(sk, &inet6_sk(addr_sk)->daddr,
632 				 newkey, newkeylen);
633 }
634 
635 static int tcp_v6_md5_do_del(struct sock *sk, struct in6_addr *peer)
636 {
637 	struct tcp_sock *tp = tcp_sk(sk);
638 	int i;
639 
640 	for (i = 0; i < tp->md5sig_info->entries6; i++) {
641 		if (ipv6_addr_equal(&tp->md5sig_info->keys6[i].addr, peer)) {
642 			/* Free the key */
643 			kfree(tp->md5sig_info->keys6[i].base.key);
644 			tp->md5sig_info->entries6--;
645 
646 			if (tp->md5sig_info->entries6 == 0) {
647 				kfree(tp->md5sig_info->keys6);
648 				tp->md5sig_info->keys6 = NULL;
649 				tp->md5sig_info->alloced6 = 0;
650 			} else {
651 				/* shrink the database */
652 				if (tp->md5sig_info->entries6 != i)
653 					memmove(&tp->md5sig_info->keys6[i],
654 						&tp->md5sig_info->keys6[i+1],
655 						(tp->md5sig_info->entries6 - i)
656 						* sizeof (tp->md5sig_info->keys6[0]));
657 			}
658 			tcp_free_md5sig_pool();
659 			return 0;
660 		}
661 	}
662 	return -ENOENT;
663 }
664 
665 static void tcp_v6_clear_md5_list (struct sock *sk)
666 {
667 	struct tcp_sock *tp = tcp_sk(sk);
668 	int i;
669 
670 	if (tp->md5sig_info->entries6) {
671 		for (i = 0; i < tp->md5sig_info->entries6; i++)
672 			kfree(tp->md5sig_info->keys6[i].base.key);
673 		tp->md5sig_info->entries6 = 0;
674 		tcp_free_md5sig_pool();
675 	}
676 
677 	kfree(tp->md5sig_info->keys6);
678 	tp->md5sig_info->keys6 = NULL;
679 	tp->md5sig_info->alloced6 = 0;
680 
681 	if (tp->md5sig_info->entries4) {
682 		for (i = 0; i < tp->md5sig_info->entries4; i++)
683 			kfree(tp->md5sig_info->keys4[i].base.key);
684 		tp->md5sig_info->entries4 = 0;
685 		tcp_free_md5sig_pool();
686 	}
687 
688 	kfree(tp->md5sig_info->keys4);
689 	tp->md5sig_info->keys4 = NULL;
690 	tp->md5sig_info->alloced4 = 0;
691 }
692 
693 static int tcp_v6_parse_md5_keys (struct sock *sk, char __user *optval,
694 				  int optlen)
695 {
696 	struct tcp_md5sig cmd;
697 	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr;
698 	u8 *newkey;
699 
700 	if (optlen < sizeof(cmd))
701 		return -EINVAL;
702 
703 	if (copy_from_user(&cmd, optval, sizeof(cmd)))
704 		return -EFAULT;
705 
706 	if (sin6->sin6_family != AF_INET6)
707 		return -EINVAL;
708 
709 	if (!cmd.tcpm_keylen) {
710 		if (!tcp_sk(sk)->md5sig_info)
711 			return -ENOENT;
712 		if (ipv6_addr_v4mapped(&sin6->sin6_addr))
713 			return tcp_v4_md5_do_del(sk, sin6->sin6_addr.s6_addr32[3]);
714 		return tcp_v6_md5_do_del(sk, &sin6->sin6_addr);
715 	}
716 
717 	if (cmd.tcpm_keylen > TCP_MD5SIG_MAXKEYLEN)
718 		return -EINVAL;
719 
720 	if (!tcp_sk(sk)->md5sig_info) {
721 		struct tcp_sock *tp = tcp_sk(sk);
722 		struct tcp_md5sig_info *p;
723 
724 		p = kzalloc(sizeof(struct tcp_md5sig_info), GFP_KERNEL);
725 		if (!p)
726 			return -ENOMEM;
727 
728 		tp->md5sig_info = p;
729 		sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
730 	}
731 
732 	newkey = kmemdup(cmd.tcpm_key, cmd.tcpm_keylen, GFP_KERNEL);
733 	if (!newkey)
734 		return -ENOMEM;
735 	if (ipv6_addr_v4mapped(&sin6->sin6_addr)) {
736 		return tcp_v4_md5_do_add(sk, sin6->sin6_addr.s6_addr32[3],
737 					 newkey, cmd.tcpm_keylen);
738 	}
739 	return tcp_v6_md5_do_add(sk, &sin6->sin6_addr, newkey, cmd.tcpm_keylen);
740 }
741 
742 static int tcp_v6_md5_hash_pseudoheader(struct tcp_md5sig_pool *hp,
743 					struct in6_addr *daddr,
744 					struct in6_addr *saddr, int nbytes)
745 {
746 	struct tcp6_pseudohdr *bp;
747 	struct scatterlist sg;
748 
749 	bp = &hp->md5_blk.ip6;
750 	/* 1. TCP pseudo-header (RFC2460) */
751 	ipv6_addr_copy(&bp->saddr, saddr);
752 	ipv6_addr_copy(&bp->daddr, daddr);
753 	bp->protocol = cpu_to_be32(IPPROTO_TCP);
754 	bp->len = cpu_to_be32(nbytes);
755 
756 	sg_init_one(&sg, bp, sizeof(*bp));
757 	return crypto_hash_update(&hp->md5_desc, &sg, sizeof(*bp));
758 }
759 
760 static int tcp_v6_md5_hash_hdr(char *md5_hash, struct tcp_md5sig_key *key,
761 			       struct in6_addr *daddr, struct in6_addr *saddr,
762 			       struct tcphdr *th)
763 {
764 	struct tcp_md5sig_pool *hp;
765 	struct hash_desc *desc;
766 
767 	hp = tcp_get_md5sig_pool();
768 	if (!hp)
769 		goto clear_hash_noput;
770 	desc = &hp->md5_desc;
771 
772 	if (crypto_hash_init(desc))
773 		goto clear_hash;
774 	if (tcp_v6_md5_hash_pseudoheader(hp, daddr, saddr, th->doff << 2))
775 		goto clear_hash;
776 	if (tcp_md5_hash_header(hp, th))
777 		goto clear_hash;
778 	if (tcp_md5_hash_key(hp, key))
779 		goto clear_hash;
780 	if (crypto_hash_final(desc, md5_hash))
781 		goto clear_hash;
782 
783 	tcp_put_md5sig_pool();
784 	return 0;
785 
786 clear_hash:
787 	tcp_put_md5sig_pool();
788 clear_hash_noput:
789 	memset(md5_hash, 0, 16);
790 	return 1;
791 }
792 
793 static int tcp_v6_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
794 			       struct sock *sk, struct request_sock *req,
795 			       struct sk_buff *skb)
796 {
797 	struct in6_addr *saddr, *daddr;
798 	struct tcp_md5sig_pool *hp;
799 	struct hash_desc *desc;
800 	struct tcphdr *th = tcp_hdr(skb);
801 
802 	if (sk) {
803 		saddr = &inet6_sk(sk)->saddr;
804 		daddr = &inet6_sk(sk)->daddr;
805 	} else if (req) {
806 		saddr = &inet6_rsk(req)->loc_addr;
807 		daddr = &inet6_rsk(req)->rmt_addr;
808 	} else {
809 		struct ipv6hdr *ip6h = ipv6_hdr(skb);
810 		saddr = &ip6h->saddr;
811 		daddr = &ip6h->daddr;
812 	}
813 
814 	hp = tcp_get_md5sig_pool();
815 	if (!hp)
816 		goto clear_hash_noput;
817 	desc = &hp->md5_desc;
818 
819 	if (crypto_hash_init(desc))
820 		goto clear_hash;
821 
822 	if (tcp_v6_md5_hash_pseudoheader(hp, daddr, saddr, skb->len))
823 		goto clear_hash;
824 	if (tcp_md5_hash_header(hp, th))
825 		goto clear_hash;
826 	if (tcp_md5_hash_skb_data(hp, skb, th->doff << 2))
827 		goto clear_hash;
828 	if (tcp_md5_hash_key(hp, key))
829 		goto clear_hash;
830 	if (crypto_hash_final(desc, md5_hash))
831 		goto clear_hash;
832 
833 	tcp_put_md5sig_pool();
834 	return 0;
835 
836 clear_hash:
837 	tcp_put_md5sig_pool();
838 clear_hash_noput:
839 	memset(md5_hash, 0, 16);
840 	return 1;
841 }
842 
843 static int tcp_v6_inbound_md5_hash (struct sock *sk, struct sk_buff *skb)
844 {
845 	__u8 *hash_location = NULL;
846 	struct tcp_md5sig_key *hash_expected;
847 	struct ipv6hdr *ip6h = ipv6_hdr(skb);
848 	struct tcphdr *th = tcp_hdr(skb);
849 	int genhash;
850 	u8 newhash[16];
851 
852 	hash_expected = tcp_v6_md5_do_lookup(sk, &ip6h->saddr);
853 	hash_location = tcp_parse_md5sig_option(th);
854 
855 	/* We've parsed the options - do we have a hash? */
856 	if (!hash_expected && !hash_location)
857 		return 0;
858 
859 	if (hash_expected && !hash_location) {
860 		NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPMD5NOTFOUND);
861 		return 1;
862 	}
863 
864 	if (!hash_expected && hash_location) {
865 		NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPMD5UNEXPECTED);
866 		return 1;
867 	}
868 
869 	/* check the signature */
870 	genhash = tcp_v6_md5_hash_skb(newhash,
871 				      hash_expected,
872 				      NULL, NULL, skb);
873 
874 	if (genhash || memcmp(hash_location, newhash, 16) != 0) {
875 		if (net_ratelimit()) {
876 			printk(KERN_INFO "MD5 Hash %s for (%pI6, %u)->(%pI6, %u)\n",
877 			       genhash ? "failed" : "mismatch",
878 			       &ip6h->saddr, ntohs(th->source),
879 			       &ip6h->daddr, ntohs(th->dest));
880 		}
881 		return 1;
882 	}
883 	return 0;
884 }
885 #endif
886 
887 struct request_sock_ops tcp6_request_sock_ops __read_mostly = {
888 	.family		=	AF_INET6,
889 	.obj_size	=	sizeof(struct tcp6_request_sock),
890 	.rtx_syn_ack	=	tcp_v6_send_synack,
891 	.send_ack	=	tcp_v6_reqsk_send_ack,
892 	.destructor	=	tcp_v6_reqsk_destructor,
893 	.send_reset	=	tcp_v6_send_reset
894 };
895 
896 #ifdef CONFIG_TCP_MD5SIG
897 static struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = {
898 	.md5_lookup	=	tcp_v6_reqsk_md5_lookup,
899 	.calc_md5_hash	=	tcp_v6_md5_hash_skb,
900 };
901 #endif
902 
903 static struct timewait_sock_ops tcp6_timewait_sock_ops = {
904 	.twsk_obj_size	= sizeof(struct tcp6_timewait_sock),
905 	.twsk_unique	= tcp_twsk_unique,
906 	.twsk_destructor= tcp_twsk_destructor,
907 };
908 
909 static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb)
910 {
911 	struct ipv6_pinfo *np = inet6_sk(sk);
912 	struct tcphdr *th = tcp_hdr(skb);
913 
914 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
915 		th->check = ~csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,  0);
916 		skb->csum_start = skb_transport_header(skb) - skb->head;
917 		skb->csum_offset = offsetof(struct tcphdr, check);
918 	} else {
919 		th->check = csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,
920 					    csum_partial(th, th->doff<<2,
921 							 skb->csum));
922 	}
923 }
924 
925 static int tcp_v6_gso_send_check(struct sk_buff *skb)
926 {
927 	struct ipv6hdr *ipv6h;
928 	struct tcphdr *th;
929 
930 	if (!pskb_may_pull(skb, sizeof(*th)))
931 		return -EINVAL;
932 
933 	ipv6h = ipv6_hdr(skb);
934 	th = tcp_hdr(skb);
935 
936 	th->check = 0;
937 	th->check = ~csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len,
938 				     IPPROTO_TCP, 0);
939 	skb->csum_start = skb_transport_header(skb) - skb->head;
940 	skb->csum_offset = offsetof(struct tcphdr, check);
941 	skb->ip_summed = CHECKSUM_PARTIAL;
942 	return 0;
943 }
944 
945 static struct sk_buff **tcp6_gro_receive(struct sk_buff **head,
946 					 struct sk_buff *skb)
947 {
948 	struct ipv6hdr *iph = skb_gro_network_header(skb);
949 
950 	switch (skb->ip_summed) {
951 	case CHECKSUM_COMPLETE:
952 		if (!tcp_v6_check(skb_gro_len(skb), &iph->saddr, &iph->daddr,
953 				  skb->csum)) {
954 			skb->ip_summed = CHECKSUM_UNNECESSARY;
955 			break;
956 		}
957 
958 		/* fall through */
959 	case CHECKSUM_NONE:
960 		NAPI_GRO_CB(skb)->flush = 1;
961 		return NULL;
962 	}
963 
964 	return tcp_gro_receive(head, skb);
965 }
966 
967 static int tcp6_gro_complete(struct sk_buff *skb)
968 {
969 	struct ipv6hdr *iph = ipv6_hdr(skb);
970 	struct tcphdr *th = tcp_hdr(skb);
971 
972 	th->check = ~tcp_v6_check(skb->len - skb_transport_offset(skb),
973 				  &iph->saddr, &iph->daddr, 0);
974 	skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
975 
976 	return tcp_gro_complete(skb);
977 }
978 
979 static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win,
980 				 u32 ts, struct tcp_md5sig_key *key, int rst)
981 {
982 	struct tcphdr *th = tcp_hdr(skb), *t1;
983 	struct sk_buff *buff;
984 	struct flowi fl;
985 	struct net *net = dev_net(skb_dst(skb)->dev);
986 	struct sock *ctl_sk = net->ipv6.tcp_sk;
987 	unsigned int tot_len = sizeof(struct tcphdr);
988 	struct dst_entry *dst;
989 	__be32 *topt;
990 
991 	if (ts)
992 		tot_len += TCPOLEN_TSTAMP_ALIGNED;
993 #ifdef CONFIG_TCP_MD5SIG
994 	if (key)
995 		tot_len += TCPOLEN_MD5SIG_ALIGNED;
996 #endif
997 
998 	buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
999 			 GFP_ATOMIC);
1000 	if (buff == NULL)
1001 		return;
1002 
1003 	skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
1004 
1005 	t1 = (struct tcphdr *) skb_push(buff, tot_len);
1006 
1007 	/* Swap the send and the receive. */
1008 	memset(t1, 0, sizeof(*t1));
1009 	t1->dest = th->source;
1010 	t1->source = th->dest;
1011 	t1->doff = tot_len / 4;
1012 	t1->seq = htonl(seq);
1013 	t1->ack_seq = htonl(ack);
1014 	t1->ack = !rst || !th->ack;
1015 	t1->rst = rst;
1016 	t1->window = htons(win);
1017 
1018 	topt = (__be32 *)(t1 + 1);
1019 
1020 	if (ts) {
1021 		*topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
1022 				(TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
1023 		*topt++ = htonl(tcp_time_stamp);
1024 		*topt++ = htonl(ts);
1025 	}
1026 
1027 #ifdef CONFIG_TCP_MD5SIG
1028 	if (key) {
1029 		*topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
1030 				(TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG);
1031 		tcp_v6_md5_hash_hdr((__u8 *)topt, key,
1032 				    &ipv6_hdr(skb)->saddr,
1033 				    &ipv6_hdr(skb)->daddr, t1);
1034 	}
1035 #endif
1036 
1037 	buff->csum = csum_partial(t1, tot_len, 0);
1038 
1039 	memset(&fl, 0, sizeof(fl));
1040 	ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr);
1041 	ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr);
1042 
1043 	t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst,
1044 				    tot_len, IPPROTO_TCP,
1045 				    buff->csum);
1046 
1047 	fl.proto = IPPROTO_TCP;
1048 	fl.oif = inet6_iif(skb);
1049 	fl.fl_ip_dport = t1->dest;
1050 	fl.fl_ip_sport = t1->source;
1051 	security_skb_classify_flow(skb, &fl);
1052 
1053 	/* Pass a socket to ip6_dst_lookup either it is for RST
1054 	 * Underlying function will use this to retrieve the network
1055 	 * namespace
1056 	 */
1057 	if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) {
1058 		if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) {
1059 			skb_dst_set(buff, dst);
1060 			ip6_xmit(ctl_sk, buff, &fl, NULL, 0);
1061 			TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
1062 			if (rst)
1063 				TCP_INC_STATS_BH(net, TCP_MIB_OUTRSTS);
1064 			return;
1065 		}
1066 	}
1067 
1068 	kfree_skb(buff);
1069 }
1070 
1071 static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
1072 {
1073 	struct tcphdr *th = tcp_hdr(skb);
1074 	u32 seq = 0, ack_seq = 0;
1075 	struct tcp_md5sig_key *key = NULL;
1076 
1077 	if (th->rst)
1078 		return;
1079 
1080 	if (!ipv6_unicast_destination(skb))
1081 		return;
1082 
1083 #ifdef CONFIG_TCP_MD5SIG
1084 	if (sk)
1085 		key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr);
1086 #endif
1087 
1088 	if (th->ack)
1089 		seq = ntohl(th->ack_seq);
1090 	else
1091 		ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len -
1092 			  (th->doff << 2);
1093 
1094 	tcp_v6_send_response(skb, seq, ack_seq, 0, 0, key, 1);
1095 }
1096 
1097 static void tcp_v6_send_ack(struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 ts,
1098 			    struct tcp_md5sig_key *key)
1099 {
1100 	tcp_v6_send_response(skb, seq, ack, win, ts, key, 0);
1101 }
1102 
1103 static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
1104 {
1105 	struct inet_timewait_sock *tw = inet_twsk(sk);
1106 	struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
1107 
1108 	tcp_v6_send_ack(skb, tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt,
1109 			tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
1110 			tcptw->tw_ts_recent, tcp_twsk_md5_key(tcptw));
1111 
1112 	inet_twsk_put(tw);
1113 }
1114 
1115 static void tcp_v6_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
1116 				  struct request_sock *req)
1117 {
1118 	tcp_v6_send_ack(skb, tcp_rsk(req)->snt_isn + 1, tcp_rsk(req)->rcv_isn + 1, req->rcv_wnd, req->ts_recent,
1119 			tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr));
1120 }
1121 
1122 
1123 static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)
1124 {
1125 	struct request_sock *req, **prev;
1126 	const struct tcphdr *th = tcp_hdr(skb);
1127 	struct sock *nsk;
1128 
1129 	/* Find possible connection requests. */
1130 	req = inet6_csk_search_req(sk, &prev, th->source,
1131 				   &ipv6_hdr(skb)->saddr,
1132 				   &ipv6_hdr(skb)->daddr, inet6_iif(skb));
1133 	if (req)
1134 		return tcp_check_req(sk, skb, req, prev);
1135 
1136 	nsk = __inet6_lookup_established(sock_net(sk), &tcp_hashinfo,
1137 			&ipv6_hdr(skb)->saddr, th->source,
1138 			&ipv6_hdr(skb)->daddr, ntohs(th->dest), inet6_iif(skb));
1139 
1140 	if (nsk) {
1141 		if (nsk->sk_state != TCP_TIME_WAIT) {
1142 			bh_lock_sock(nsk);
1143 			return nsk;
1144 		}
1145 		inet_twsk_put(inet_twsk(nsk));
1146 		return NULL;
1147 	}
1148 
1149 #ifdef CONFIG_SYN_COOKIES
1150 	if (!th->rst && !th->syn && th->ack)
1151 		sk = cookie_v6_check(sk, skb);
1152 #endif
1153 	return sk;
1154 }
1155 
1156 /* FIXME: this is substantially similar to the ipv4 code.
1157  * Can some kind of merge be done? -- erics
1158  */
1159 static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1160 {
1161 	struct inet6_request_sock *treq;
1162 	struct ipv6_pinfo *np = inet6_sk(sk);
1163 	struct tcp_options_received tmp_opt;
1164 	struct tcp_sock *tp = tcp_sk(sk);
1165 	struct request_sock *req = NULL;
1166 	__u32 isn = TCP_SKB_CB(skb)->when;
1167 #ifdef CONFIG_SYN_COOKIES
1168 	int want_cookie = 0;
1169 #else
1170 #define want_cookie 0
1171 #endif
1172 
1173 	if (skb->protocol == htons(ETH_P_IP))
1174 		return tcp_v4_conn_request(sk, skb);
1175 
1176 	if (!ipv6_unicast_destination(skb))
1177 		goto drop;
1178 
1179 	if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
1180 		if (net_ratelimit())
1181 			syn_flood_warning(skb);
1182 #ifdef CONFIG_SYN_COOKIES
1183 		if (sysctl_tcp_syncookies)
1184 			want_cookie = 1;
1185 		else
1186 #endif
1187 		goto drop;
1188 	}
1189 
1190 	if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
1191 		goto drop;
1192 
1193 	req = inet6_reqsk_alloc(&tcp6_request_sock_ops);
1194 	if (req == NULL)
1195 		goto drop;
1196 
1197 #ifdef CONFIG_TCP_MD5SIG
1198 	tcp_rsk(req)->af_specific = &tcp_request_sock_ipv6_ops;
1199 #endif
1200 
1201 	tcp_clear_options(&tmp_opt);
1202 	tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
1203 	tmp_opt.user_mss = tp->rx_opt.user_mss;
1204 
1205 	tcp_parse_options(skb, &tmp_opt, 0);
1206 
1207 	if (want_cookie && !tmp_opt.saw_tstamp)
1208 		tcp_clear_options(&tmp_opt);
1209 
1210 	tmp_opt.tstamp_ok = tmp_opt.saw_tstamp;
1211 	tcp_openreq_init(req, &tmp_opt, skb);
1212 
1213 	treq = inet6_rsk(req);
1214 	ipv6_addr_copy(&treq->rmt_addr, &ipv6_hdr(skb)->saddr);
1215 	ipv6_addr_copy(&treq->loc_addr, &ipv6_hdr(skb)->daddr);
1216 	if (!want_cookie)
1217 		TCP_ECN_create_request(req, tcp_hdr(skb));
1218 
1219 	if (want_cookie) {
1220 		isn = cookie_v6_init_sequence(sk, skb, &req->mss);
1221 		req->cookie_ts = tmp_opt.tstamp_ok;
1222 	} else if (!isn) {
1223 		if (ipv6_opt_accepted(sk, skb) ||
1224 		    np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
1225 		    np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
1226 			atomic_inc(&skb->users);
1227 			treq->pktopts = skb;
1228 		}
1229 		treq->iif = sk->sk_bound_dev_if;
1230 
1231 		/* So that link locals have meaning */
1232 		if (!sk->sk_bound_dev_if &&
1233 		    ipv6_addr_type(&treq->rmt_addr) & IPV6_ADDR_LINKLOCAL)
1234 			treq->iif = inet6_iif(skb);
1235 
1236 		isn = tcp_v6_init_sequence(skb);
1237 	}
1238 
1239 	tcp_rsk(req)->snt_isn = isn;
1240 
1241 	security_inet_conn_request(sk, skb, req);
1242 
1243 	if (tcp_v6_send_synack(sk, req))
1244 		goto drop;
1245 
1246 	if (!want_cookie) {
1247 		inet6_csk_reqsk_queue_hash_add(sk, req, TCP_TIMEOUT_INIT);
1248 		return 0;
1249 	}
1250 
1251 drop:
1252 	if (req)
1253 		reqsk_free(req);
1254 
1255 	return 0; /* don't send reset */
1256 }
1257 
1258 static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
1259 					  struct request_sock *req,
1260 					  struct dst_entry *dst)
1261 {
1262 	struct inet6_request_sock *treq;
1263 	struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
1264 	struct tcp6_sock *newtcp6sk;
1265 	struct inet_sock *newinet;
1266 	struct tcp_sock *newtp;
1267 	struct sock *newsk;
1268 	struct ipv6_txoptions *opt;
1269 #ifdef CONFIG_TCP_MD5SIG
1270 	struct tcp_md5sig_key *key;
1271 #endif
1272 
1273 	if (skb->protocol == htons(ETH_P_IP)) {
1274 		/*
1275 		 *	v6 mapped
1276 		 */
1277 
1278 		newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst);
1279 
1280 		if (newsk == NULL)
1281 			return NULL;
1282 
1283 		newtcp6sk = (struct tcp6_sock *)newsk;
1284 		inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1285 
1286 		newinet = inet_sk(newsk);
1287 		newnp = inet6_sk(newsk);
1288 		newtp = tcp_sk(newsk);
1289 
1290 		memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1291 
1292 		ipv6_addr_set(&newnp->daddr, 0, 0, htonl(0x0000FFFF),
1293 			      newinet->daddr);
1294 
1295 		ipv6_addr_set(&newnp->saddr, 0, 0, htonl(0x0000FFFF),
1296 			      newinet->saddr);
1297 
1298 		ipv6_addr_copy(&newnp->rcv_saddr, &newnp->saddr);
1299 
1300 		inet_csk(newsk)->icsk_af_ops = &ipv6_mapped;
1301 		newsk->sk_backlog_rcv = tcp_v4_do_rcv;
1302 #ifdef CONFIG_TCP_MD5SIG
1303 		newtp->af_specific = &tcp_sock_ipv6_mapped_specific;
1304 #endif
1305 
1306 		newnp->pktoptions  = NULL;
1307 		newnp->opt	   = NULL;
1308 		newnp->mcast_oif   = inet6_iif(skb);
1309 		newnp->mcast_hops  = ipv6_hdr(skb)->hop_limit;
1310 
1311 		/*
1312 		 * No need to charge this sock to the relevant IPv6 refcnt debug socks count
1313 		 * here, tcp_create_openreq_child now does this for us, see the comment in
1314 		 * that function for the gory details. -acme
1315 		 */
1316 
1317 		/* It is tricky place. Until this moment IPv4 tcp
1318 		   worked with IPv6 icsk.icsk_af_ops.
1319 		   Sync it now.
1320 		 */
1321 		tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie);
1322 
1323 		return newsk;
1324 	}
1325 
1326 	treq = inet6_rsk(req);
1327 	opt = np->opt;
1328 
1329 	if (sk_acceptq_is_full(sk))
1330 		goto out_overflow;
1331 
1332 	if (dst == NULL) {
1333 		struct in6_addr *final_p = NULL, final;
1334 		struct flowi fl;
1335 
1336 		memset(&fl, 0, sizeof(fl));
1337 		fl.proto = IPPROTO_TCP;
1338 		ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
1339 		if (opt && opt->srcrt) {
1340 			struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
1341 			ipv6_addr_copy(&final, &fl.fl6_dst);
1342 			ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
1343 			final_p = &final;
1344 		}
1345 		ipv6_addr_copy(&fl.fl6_src, &treq->loc_addr);
1346 		fl.oif = sk->sk_bound_dev_if;
1347 		fl.fl_ip_dport = inet_rsk(req)->rmt_port;
1348 		fl.fl_ip_sport = inet_rsk(req)->loc_port;
1349 		security_req_classify_flow(req, &fl);
1350 
1351 		if (ip6_dst_lookup(sk, &dst, &fl))
1352 			goto out;
1353 
1354 		if (final_p)
1355 			ipv6_addr_copy(&fl.fl6_dst, final_p);
1356 
1357 		if ((xfrm_lookup(sock_net(sk), &dst, &fl, sk, 0)) < 0)
1358 			goto out;
1359 	}
1360 
1361 	newsk = tcp_create_openreq_child(sk, req, skb);
1362 	if (newsk == NULL)
1363 		goto out;
1364 
1365 	/*
1366 	 * No need to charge this sock to the relevant IPv6 refcnt debug socks
1367 	 * count here, tcp_create_openreq_child now does this for us, see the
1368 	 * comment in that function for the gory details. -acme
1369 	 */
1370 
1371 	newsk->sk_gso_type = SKB_GSO_TCPV6;
1372 	__ip6_dst_store(newsk, dst, NULL, NULL);
1373 
1374 	newtcp6sk = (struct tcp6_sock *)newsk;
1375 	inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1376 
1377 	newtp = tcp_sk(newsk);
1378 	newinet = inet_sk(newsk);
1379 	newnp = inet6_sk(newsk);
1380 
1381 	memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1382 
1383 	ipv6_addr_copy(&newnp->daddr, &treq->rmt_addr);
1384 	ipv6_addr_copy(&newnp->saddr, &treq->loc_addr);
1385 	ipv6_addr_copy(&newnp->rcv_saddr, &treq->loc_addr);
1386 	newsk->sk_bound_dev_if = treq->iif;
1387 
1388 	/* Now IPv6 options...
1389 
1390 	   First: no IPv4 options.
1391 	 */
1392 	newinet->opt = NULL;
1393 	newnp->ipv6_fl_list = NULL;
1394 
1395 	/* Clone RX bits */
1396 	newnp->rxopt.all = np->rxopt.all;
1397 
1398 	/* Clone pktoptions received with SYN */
1399 	newnp->pktoptions = NULL;
1400 	if (treq->pktopts != NULL) {
1401 		newnp->pktoptions = skb_clone(treq->pktopts, GFP_ATOMIC);
1402 		kfree_skb(treq->pktopts);
1403 		treq->pktopts = NULL;
1404 		if (newnp->pktoptions)
1405 			skb_set_owner_r(newnp->pktoptions, newsk);
1406 	}
1407 	newnp->opt	  = NULL;
1408 	newnp->mcast_oif  = inet6_iif(skb);
1409 	newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
1410 
1411 	/* Clone native IPv6 options from listening socket (if any)
1412 
1413 	   Yes, keeping reference count would be much more clever,
1414 	   but we make one more one thing there: reattach optmem
1415 	   to newsk.
1416 	 */
1417 	if (opt) {
1418 		newnp->opt = ipv6_dup_options(newsk, opt);
1419 		if (opt != np->opt)
1420 			sock_kfree_s(sk, opt, opt->tot_len);
1421 	}
1422 
1423 	inet_csk(newsk)->icsk_ext_hdr_len = 0;
1424 	if (newnp->opt)
1425 		inet_csk(newsk)->icsk_ext_hdr_len = (newnp->opt->opt_nflen +
1426 						     newnp->opt->opt_flen);
1427 
1428 	tcp_mtup_init(newsk);
1429 	tcp_sync_mss(newsk, dst_mtu(dst));
1430 	newtp->advmss = dst_metric(dst, RTAX_ADVMSS);
1431 	tcp_initialize_rcv_mss(newsk);
1432 
1433 	newinet->daddr = newinet->saddr = newinet->rcv_saddr = LOOPBACK4_IPV6;
1434 
1435 #ifdef CONFIG_TCP_MD5SIG
1436 	/* Copy over the MD5 key from the original socket */
1437 	if ((key = tcp_v6_md5_do_lookup(sk, &newnp->daddr)) != NULL) {
1438 		/* We're using one, so create a matching key
1439 		 * on the newsk structure. If we fail to get
1440 		 * memory, then we end up not copying the key
1441 		 * across. Shucks.
1442 		 */
1443 		char *newkey = kmemdup(key->key, key->keylen, GFP_ATOMIC);
1444 		if (newkey != NULL)
1445 			tcp_v6_md5_do_add(newsk, &newnp->daddr,
1446 					  newkey, key->keylen);
1447 	}
1448 #endif
1449 
1450 	__inet6_hash(newsk);
1451 	__inet_inherit_port(sk, newsk);
1452 
1453 	return newsk;
1454 
1455 out_overflow:
1456 	NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
1457 out:
1458 	NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
1459 	if (opt && opt != np->opt)
1460 		sock_kfree_s(sk, opt, opt->tot_len);
1461 	dst_release(dst);
1462 	return NULL;
1463 }
1464 
1465 static __sum16 tcp_v6_checksum_init(struct sk_buff *skb)
1466 {
1467 	if (skb->ip_summed == CHECKSUM_COMPLETE) {
1468 		if (!tcp_v6_check(skb->len, &ipv6_hdr(skb)->saddr,
1469 				  &ipv6_hdr(skb)->daddr, skb->csum)) {
1470 			skb->ip_summed = CHECKSUM_UNNECESSARY;
1471 			return 0;
1472 		}
1473 	}
1474 
1475 	skb->csum = ~csum_unfold(tcp_v6_check(skb->len,
1476 					      &ipv6_hdr(skb)->saddr,
1477 					      &ipv6_hdr(skb)->daddr, 0));
1478 
1479 	if (skb->len <= 76) {
1480 		return __skb_checksum_complete(skb);
1481 	}
1482 	return 0;
1483 }
1484 
1485 /* The socket must have it's spinlock held when we get
1486  * here.
1487  *
1488  * We have a potential double-lock case here, so even when
1489  * doing backlog processing we use the BH locking scheme.
1490  * This is because we cannot sleep with the original spinlock
1491  * held.
1492  */
1493 static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1494 {
1495 	struct ipv6_pinfo *np = inet6_sk(sk);
1496 	struct tcp_sock *tp;
1497 	struct sk_buff *opt_skb = NULL;
1498 
1499 	/* Imagine: socket is IPv6. IPv4 packet arrives,
1500 	   goes to IPv4 receive handler and backlogged.
1501 	   From backlog it always goes here. Kerboom...
1502 	   Fortunately, tcp_rcv_established and rcv_established
1503 	   handle them correctly, but it is not case with
1504 	   tcp_v6_hnd_req and tcp_v6_send_reset().   --ANK
1505 	 */
1506 
1507 	if (skb->protocol == htons(ETH_P_IP))
1508 		return tcp_v4_do_rcv(sk, skb);
1509 
1510 #ifdef CONFIG_TCP_MD5SIG
1511 	if (tcp_v6_inbound_md5_hash (sk, skb))
1512 		goto discard;
1513 #endif
1514 
1515 	if (sk_filter(sk, skb))
1516 		goto discard;
1517 
1518 	/*
1519 	 *	socket locking is here for SMP purposes as backlog rcv
1520 	 *	is currently called with bh processing disabled.
1521 	 */
1522 
1523 	/* Do Stevens' IPV6_PKTOPTIONS.
1524 
1525 	   Yes, guys, it is the only place in our code, where we
1526 	   may make it not affecting IPv4.
1527 	   The rest of code is protocol independent,
1528 	   and I do not like idea to uglify IPv4.
1529 
1530 	   Actually, all the idea behind IPV6_PKTOPTIONS
1531 	   looks not very well thought. For now we latch
1532 	   options, received in the last packet, enqueued
1533 	   by tcp. Feel free to propose better solution.
1534 					       --ANK (980728)
1535 	 */
1536 	if (np->rxopt.all)
1537 		opt_skb = skb_clone(skb, GFP_ATOMIC);
1538 
1539 	if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1540 		TCP_CHECK_TIMER(sk);
1541 		if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len))
1542 			goto reset;
1543 		TCP_CHECK_TIMER(sk);
1544 		if (opt_skb)
1545 			goto ipv6_pktoptions;
1546 		return 0;
1547 	}
1548 
1549 	if (skb->len < tcp_hdrlen(skb) || tcp_checksum_complete(skb))
1550 		goto csum_err;
1551 
1552 	if (sk->sk_state == TCP_LISTEN) {
1553 		struct sock *nsk = tcp_v6_hnd_req(sk, skb);
1554 		if (!nsk)
1555 			goto discard;
1556 
1557 		/*
1558 		 * Queue it on the new socket if the new socket is active,
1559 		 * otherwise we just shortcircuit this and continue with
1560 		 * the new socket..
1561 		 */
1562 		if(nsk != sk) {
1563 			if (tcp_child_process(sk, nsk, skb))
1564 				goto reset;
1565 			if (opt_skb)
1566 				__kfree_skb(opt_skb);
1567 			return 0;
1568 		}
1569 	}
1570 
1571 	TCP_CHECK_TIMER(sk);
1572 	if (tcp_rcv_state_process(sk, skb, tcp_hdr(skb), skb->len))
1573 		goto reset;
1574 	TCP_CHECK_TIMER(sk);
1575 	if (opt_skb)
1576 		goto ipv6_pktoptions;
1577 	return 0;
1578 
1579 reset:
1580 	tcp_v6_send_reset(sk, skb);
1581 discard:
1582 	if (opt_skb)
1583 		__kfree_skb(opt_skb);
1584 	kfree_skb(skb);
1585 	return 0;
1586 csum_err:
1587 	TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_INERRS);
1588 	goto discard;
1589 
1590 
1591 ipv6_pktoptions:
1592 	/* Do you ask, what is it?
1593 
1594 	   1. skb was enqueued by tcp.
1595 	   2. skb is added to tail of read queue, rather than out of order.
1596 	   3. socket is not in passive state.
1597 	   4. Finally, it really contains options, which user wants to receive.
1598 	 */
1599 	tp = tcp_sk(sk);
1600 	if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1601 	    !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1602 		if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
1603 			np->mcast_oif = inet6_iif(opt_skb);
1604 		if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
1605 			np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
1606 		if (ipv6_opt_accepted(sk, opt_skb)) {
1607 			skb_set_owner_r(opt_skb, sk);
1608 			opt_skb = xchg(&np->pktoptions, opt_skb);
1609 		} else {
1610 			__kfree_skb(opt_skb);
1611 			opt_skb = xchg(&np->pktoptions, NULL);
1612 		}
1613 	}
1614 
1615 	kfree_skb(opt_skb);
1616 	return 0;
1617 }
1618 
1619 static int tcp_v6_rcv(struct sk_buff *skb)
1620 {
1621 	struct tcphdr *th;
1622 	struct sock *sk;
1623 	int ret;
1624 	struct net *net = dev_net(skb->dev);
1625 
1626 	if (skb->pkt_type != PACKET_HOST)
1627 		goto discard_it;
1628 
1629 	/*
1630 	 *	Count it even if it's bad.
1631 	 */
1632 	TCP_INC_STATS_BH(net, TCP_MIB_INSEGS);
1633 
1634 	if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1635 		goto discard_it;
1636 
1637 	th = tcp_hdr(skb);
1638 
1639 	if (th->doff < sizeof(struct tcphdr)/4)
1640 		goto bad_packet;
1641 	if (!pskb_may_pull(skb, th->doff*4))
1642 		goto discard_it;
1643 
1644 	if (!skb_csum_unnecessary(skb) && tcp_v6_checksum_init(skb))
1645 		goto bad_packet;
1646 
1647 	th = tcp_hdr(skb);
1648 	TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1649 	TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1650 				    skb->len - th->doff*4);
1651 	TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1652 	TCP_SKB_CB(skb)->when = 0;
1653 	TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(ipv6_hdr(skb));
1654 	TCP_SKB_CB(skb)->sacked = 0;
1655 
1656 	sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
1657 	if (!sk)
1658 		goto no_tcp_socket;
1659 
1660 process:
1661 	if (sk->sk_state == TCP_TIME_WAIT)
1662 		goto do_time_wait;
1663 
1664 	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1665 		goto discard_and_relse;
1666 
1667 	if (sk_filter(sk, skb))
1668 		goto discard_and_relse;
1669 
1670 	skb->dev = NULL;
1671 
1672 	bh_lock_sock_nested(sk);
1673 	ret = 0;
1674 	if (!sock_owned_by_user(sk)) {
1675 #ifdef CONFIG_NET_DMA
1676 		struct tcp_sock *tp = tcp_sk(sk);
1677 		if (!tp->ucopy.dma_chan && tp->ucopy.pinned_list)
1678 			tp->ucopy.dma_chan = dma_find_channel(DMA_MEMCPY);
1679 		if (tp->ucopy.dma_chan)
1680 			ret = tcp_v6_do_rcv(sk, skb);
1681 		else
1682 #endif
1683 		{
1684 			if (!tcp_prequeue(sk, skb))
1685 				ret = tcp_v6_do_rcv(sk, skb);
1686 		}
1687 	} else
1688 		sk_add_backlog(sk, skb);
1689 	bh_unlock_sock(sk);
1690 
1691 	sock_put(sk);
1692 	return ret ? -1 : 0;
1693 
1694 no_tcp_socket:
1695 	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1696 		goto discard_it;
1697 
1698 	if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1699 bad_packet:
1700 		TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
1701 	} else {
1702 		tcp_v6_send_reset(NULL, skb);
1703 	}
1704 
1705 discard_it:
1706 
1707 	/*
1708 	 *	Discard frame
1709 	 */
1710 
1711 	kfree_skb(skb);
1712 	return 0;
1713 
1714 discard_and_relse:
1715 	sock_put(sk);
1716 	goto discard_it;
1717 
1718 do_time_wait:
1719 	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1720 		inet_twsk_put(inet_twsk(sk));
1721 		goto discard_it;
1722 	}
1723 
1724 	if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1725 		TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
1726 		inet_twsk_put(inet_twsk(sk));
1727 		goto discard_it;
1728 	}
1729 
1730 	switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
1731 	case TCP_TW_SYN:
1732 	{
1733 		struct sock *sk2;
1734 
1735 		sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo,
1736 					    &ipv6_hdr(skb)->daddr,
1737 					    ntohs(th->dest), inet6_iif(skb));
1738 		if (sk2 != NULL) {
1739 			struct inet_timewait_sock *tw = inet_twsk(sk);
1740 			inet_twsk_deschedule(tw, &tcp_death_row);
1741 			inet_twsk_put(tw);
1742 			sk = sk2;
1743 			goto process;
1744 		}
1745 		/* Fall through to ACK */
1746 	}
1747 	case TCP_TW_ACK:
1748 		tcp_v6_timewait_ack(sk, skb);
1749 		break;
1750 	case TCP_TW_RST:
1751 		goto no_tcp_socket;
1752 	case TCP_TW_SUCCESS:;
1753 	}
1754 	goto discard_it;
1755 }
1756 
1757 static int tcp_v6_remember_stamp(struct sock *sk)
1758 {
1759 	/* Alas, not yet... */
1760 	return 0;
1761 }
1762 
1763 static struct inet_connection_sock_af_ops ipv6_specific = {
1764 	.queue_xmit	   = inet6_csk_xmit,
1765 	.send_check	   = tcp_v6_send_check,
1766 	.rebuild_header	   = inet6_sk_rebuild_header,
1767 	.conn_request	   = tcp_v6_conn_request,
1768 	.syn_recv_sock	   = tcp_v6_syn_recv_sock,
1769 	.remember_stamp	   = tcp_v6_remember_stamp,
1770 	.net_header_len	   = sizeof(struct ipv6hdr),
1771 	.setsockopt	   = ipv6_setsockopt,
1772 	.getsockopt	   = ipv6_getsockopt,
1773 	.addr2sockaddr	   = inet6_csk_addr2sockaddr,
1774 	.sockaddr_len	   = sizeof(struct sockaddr_in6),
1775 	.bind_conflict	   = inet6_csk_bind_conflict,
1776 #ifdef CONFIG_COMPAT
1777 	.compat_setsockopt = compat_ipv6_setsockopt,
1778 	.compat_getsockopt = compat_ipv6_getsockopt,
1779 #endif
1780 };
1781 
1782 #ifdef CONFIG_TCP_MD5SIG
1783 static struct tcp_sock_af_ops tcp_sock_ipv6_specific = {
1784 	.md5_lookup	=	tcp_v6_md5_lookup,
1785 	.calc_md5_hash	=	tcp_v6_md5_hash_skb,
1786 	.md5_add	=	tcp_v6_md5_add_func,
1787 	.md5_parse	=	tcp_v6_parse_md5_keys,
1788 };
1789 #endif
1790 
1791 /*
1792  *	TCP over IPv4 via INET6 API
1793  */
1794 
1795 static struct inet_connection_sock_af_ops ipv6_mapped = {
1796 	.queue_xmit	   = ip_queue_xmit,
1797 	.send_check	   = tcp_v4_send_check,
1798 	.rebuild_header	   = inet_sk_rebuild_header,
1799 	.conn_request	   = tcp_v6_conn_request,
1800 	.syn_recv_sock	   = tcp_v6_syn_recv_sock,
1801 	.remember_stamp	   = tcp_v4_remember_stamp,
1802 	.net_header_len	   = sizeof(struct iphdr),
1803 	.setsockopt	   = ipv6_setsockopt,
1804 	.getsockopt	   = ipv6_getsockopt,
1805 	.addr2sockaddr	   = inet6_csk_addr2sockaddr,
1806 	.sockaddr_len	   = sizeof(struct sockaddr_in6),
1807 	.bind_conflict	   = inet6_csk_bind_conflict,
1808 #ifdef CONFIG_COMPAT
1809 	.compat_setsockopt = compat_ipv6_setsockopt,
1810 	.compat_getsockopt = compat_ipv6_getsockopt,
1811 #endif
1812 };
1813 
1814 #ifdef CONFIG_TCP_MD5SIG
1815 static struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = {
1816 	.md5_lookup	=	tcp_v4_md5_lookup,
1817 	.calc_md5_hash	=	tcp_v4_md5_hash_skb,
1818 	.md5_add	=	tcp_v6_md5_add_func,
1819 	.md5_parse	=	tcp_v6_parse_md5_keys,
1820 };
1821 #endif
1822 
1823 /* NOTE: A lot of things set to zero explicitly by call to
1824  *       sk_alloc() so need not be done here.
1825  */
1826 static int tcp_v6_init_sock(struct sock *sk)
1827 {
1828 	struct inet_connection_sock *icsk = inet_csk(sk);
1829 	struct tcp_sock *tp = tcp_sk(sk);
1830 
1831 	skb_queue_head_init(&tp->out_of_order_queue);
1832 	tcp_init_xmit_timers(sk);
1833 	tcp_prequeue_init(tp);
1834 
1835 	icsk->icsk_rto = TCP_TIMEOUT_INIT;
1836 	tp->mdev = TCP_TIMEOUT_INIT;
1837 
1838 	/* So many TCP implementations out there (incorrectly) count the
1839 	 * initial SYN frame in their delayed-ACK and congestion control
1840 	 * algorithms that we must have the following bandaid to talk
1841 	 * efficiently to them.  -DaveM
1842 	 */
1843 	tp->snd_cwnd = 2;
1844 
1845 	/* See draft-stevens-tcpca-spec-01 for discussion of the
1846 	 * initialization of these values.
1847 	 */
1848 	tp->snd_ssthresh = 0x7fffffff;
1849 	tp->snd_cwnd_clamp = ~0;
1850 	tp->mss_cache = 536;
1851 
1852 	tp->reordering = sysctl_tcp_reordering;
1853 
1854 	sk->sk_state = TCP_CLOSE;
1855 
1856 	icsk->icsk_af_ops = &ipv6_specific;
1857 	icsk->icsk_ca_ops = &tcp_init_congestion_ops;
1858 	icsk->icsk_sync_mss = tcp_sync_mss;
1859 	sk->sk_write_space = sk_stream_write_space;
1860 	sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
1861 
1862 #ifdef CONFIG_TCP_MD5SIG
1863 	tp->af_specific = &tcp_sock_ipv6_specific;
1864 #endif
1865 
1866 	sk->sk_sndbuf = sysctl_tcp_wmem[1];
1867 	sk->sk_rcvbuf = sysctl_tcp_rmem[1];
1868 
1869 	local_bh_disable();
1870 	percpu_counter_inc(&tcp_sockets_allocated);
1871 	local_bh_enable();
1872 
1873 	return 0;
1874 }
1875 
1876 static void tcp_v6_destroy_sock(struct sock *sk)
1877 {
1878 #ifdef CONFIG_TCP_MD5SIG
1879 	/* Clean up the MD5 key list */
1880 	if (tcp_sk(sk)->md5sig_info)
1881 		tcp_v6_clear_md5_list(sk);
1882 #endif
1883 	tcp_v4_destroy_sock(sk);
1884 	inet6_destroy_sock(sk);
1885 }
1886 
1887 #ifdef CONFIG_PROC_FS
1888 /* Proc filesystem TCPv6 sock list dumping. */
1889 static void get_openreq6(struct seq_file *seq,
1890 			 struct sock *sk, struct request_sock *req, int i, int uid)
1891 {
1892 	int ttd = req->expires - jiffies;
1893 	struct in6_addr *src = &inet6_rsk(req)->loc_addr;
1894 	struct in6_addr *dest = &inet6_rsk(req)->rmt_addr;
1895 
1896 	if (ttd < 0)
1897 		ttd = 0;
1898 
1899 	seq_printf(seq,
1900 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1901 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
1902 		   i,
1903 		   src->s6_addr32[0], src->s6_addr32[1],
1904 		   src->s6_addr32[2], src->s6_addr32[3],
1905 		   ntohs(inet_rsk(req)->loc_port),
1906 		   dest->s6_addr32[0], dest->s6_addr32[1],
1907 		   dest->s6_addr32[2], dest->s6_addr32[3],
1908 		   ntohs(inet_rsk(req)->rmt_port),
1909 		   TCP_SYN_RECV,
1910 		   0,0, /* could print option size, but that is af dependent. */
1911 		   1,   /* timers active (only the expire timer) */
1912 		   jiffies_to_clock_t(ttd),
1913 		   req->retrans,
1914 		   uid,
1915 		   0,  /* non standard timer */
1916 		   0, /* open_requests have no inode */
1917 		   0, req);
1918 }
1919 
1920 static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
1921 {
1922 	struct in6_addr *dest, *src;
1923 	__u16 destp, srcp;
1924 	int timer_active;
1925 	unsigned long timer_expires;
1926 	struct inet_sock *inet = inet_sk(sp);
1927 	struct tcp_sock *tp = tcp_sk(sp);
1928 	const struct inet_connection_sock *icsk = inet_csk(sp);
1929 	struct ipv6_pinfo *np = inet6_sk(sp);
1930 
1931 	dest  = &np->daddr;
1932 	src   = &np->rcv_saddr;
1933 	destp = ntohs(inet->dport);
1934 	srcp  = ntohs(inet->sport);
1935 
1936 	if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
1937 		timer_active	= 1;
1938 		timer_expires	= icsk->icsk_timeout;
1939 	} else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
1940 		timer_active	= 4;
1941 		timer_expires	= icsk->icsk_timeout;
1942 	} else if (timer_pending(&sp->sk_timer)) {
1943 		timer_active	= 2;
1944 		timer_expires	= sp->sk_timer.expires;
1945 	} else {
1946 		timer_active	= 0;
1947 		timer_expires = jiffies;
1948 	}
1949 
1950 	seq_printf(seq,
1951 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1952 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %lu %lu %u %u %d\n",
1953 		   i,
1954 		   src->s6_addr32[0], src->s6_addr32[1],
1955 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
1956 		   dest->s6_addr32[0], dest->s6_addr32[1],
1957 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
1958 		   sp->sk_state,
1959 		   tp->write_seq-tp->snd_una,
1960 		   (sp->sk_state == TCP_LISTEN) ? sp->sk_ack_backlog : (tp->rcv_nxt - tp->copied_seq),
1961 		   timer_active,
1962 		   jiffies_to_clock_t(timer_expires - jiffies),
1963 		   icsk->icsk_retransmits,
1964 		   sock_i_uid(sp),
1965 		   icsk->icsk_probes_out,
1966 		   sock_i_ino(sp),
1967 		   atomic_read(&sp->sk_refcnt), sp,
1968 		   jiffies_to_clock_t(icsk->icsk_rto),
1969 		   jiffies_to_clock_t(icsk->icsk_ack.ato),
1970 		   (icsk->icsk_ack.quick << 1 ) | icsk->icsk_ack.pingpong,
1971 		   tp->snd_cwnd, tp->snd_ssthresh>=0xFFFF?-1:tp->snd_ssthresh
1972 		   );
1973 }
1974 
1975 static void get_timewait6_sock(struct seq_file *seq,
1976 			       struct inet_timewait_sock *tw, int i)
1977 {
1978 	struct in6_addr *dest, *src;
1979 	__u16 destp, srcp;
1980 	struct inet6_timewait_sock *tw6 = inet6_twsk((struct sock *)tw);
1981 	int ttd = tw->tw_ttd - jiffies;
1982 
1983 	if (ttd < 0)
1984 		ttd = 0;
1985 
1986 	dest = &tw6->tw_v6_daddr;
1987 	src  = &tw6->tw_v6_rcv_saddr;
1988 	destp = ntohs(tw->tw_dport);
1989 	srcp  = ntohs(tw->tw_sport);
1990 
1991 	seq_printf(seq,
1992 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
1993 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
1994 		   i,
1995 		   src->s6_addr32[0], src->s6_addr32[1],
1996 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
1997 		   dest->s6_addr32[0], dest->s6_addr32[1],
1998 		   dest->s6_addr32[2], dest->s6_addr32[3], destp,
1999 		   tw->tw_substate, 0, 0,
2000 		   3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
2001 		   atomic_read(&tw->tw_refcnt), tw);
2002 }
2003 
2004 static int tcp6_seq_show(struct seq_file *seq, void *v)
2005 {
2006 	struct tcp_iter_state *st;
2007 
2008 	if (v == SEQ_START_TOKEN) {
2009 		seq_puts(seq,
2010 			 "  sl  "
2011 			 "local_address                         "
2012 			 "remote_address                        "
2013 			 "st tx_queue rx_queue tr tm->when retrnsmt"
2014 			 "   uid  timeout inode\n");
2015 		goto out;
2016 	}
2017 	st = seq->private;
2018 
2019 	switch (st->state) {
2020 	case TCP_SEQ_STATE_LISTENING:
2021 	case TCP_SEQ_STATE_ESTABLISHED:
2022 		get_tcp6_sock(seq, v, st->num);
2023 		break;
2024 	case TCP_SEQ_STATE_OPENREQ:
2025 		get_openreq6(seq, st->syn_wait_sk, v, st->num, st->uid);
2026 		break;
2027 	case TCP_SEQ_STATE_TIME_WAIT:
2028 		get_timewait6_sock(seq, v, st->num);
2029 		break;
2030 	}
2031 out:
2032 	return 0;
2033 }
2034 
2035 static struct tcp_seq_afinfo tcp6_seq_afinfo = {
2036 	.name		= "tcp6",
2037 	.family		= AF_INET6,
2038 	.seq_fops	= {
2039 		.owner		= THIS_MODULE,
2040 	},
2041 	.seq_ops	= {
2042 		.show		= tcp6_seq_show,
2043 	},
2044 };
2045 
2046 int tcp6_proc_init(struct net *net)
2047 {
2048 	return tcp_proc_register(net, &tcp6_seq_afinfo);
2049 }
2050 
2051 void tcp6_proc_exit(struct net *net)
2052 {
2053 	tcp_proc_unregister(net, &tcp6_seq_afinfo);
2054 }
2055 #endif
2056 
2057 struct proto tcpv6_prot = {
2058 	.name			= "TCPv6",
2059 	.owner			= THIS_MODULE,
2060 	.close			= tcp_close,
2061 	.connect		= tcp_v6_connect,
2062 	.disconnect		= tcp_disconnect,
2063 	.accept			= inet_csk_accept,
2064 	.ioctl			= tcp_ioctl,
2065 	.init			= tcp_v6_init_sock,
2066 	.destroy		= tcp_v6_destroy_sock,
2067 	.shutdown		= tcp_shutdown,
2068 	.setsockopt		= tcp_setsockopt,
2069 	.getsockopt		= tcp_getsockopt,
2070 	.recvmsg		= tcp_recvmsg,
2071 	.backlog_rcv		= tcp_v6_do_rcv,
2072 	.hash			= tcp_v6_hash,
2073 	.unhash			= inet_unhash,
2074 	.get_port		= inet_csk_get_port,
2075 	.enter_memory_pressure	= tcp_enter_memory_pressure,
2076 	.sockets_allocated	= &tcp_sockets_allocated,
2077 	.memory_allocated	= &tcp_memory_allocated,
2078 	.memory_pressure	= &tcp_memory_pressure,
2079 	.orphan_count		= &tcp_orphan_count,
2080 	.sysctl_mem		= sysctl_tcp_mem,
2081 	.sysctl_wmem		= sysctl_tcp_wmem,
2082 	.sysctl_rmem		= sysctl_tcp_rmem,
2083 	.max_header		= MAX_TCP_HEADER,
2084 	.obj_size		= sizeof(struct tcp6_sock),
2085 	.slab_flags		= SLAB_DESTROY_BY_RCU,
2086 	.twsk_prot		= &tcp6_timewait_sock_ops,
2087 	.rsk_prot		= &tcp6_request_sock_ops,
2088 	.h.hashinfo		= &tcp_hashinfo,
2089 #ifdef CONFIG_COMPAT
2090 	.compat_setsockopt	= compat_tcp_setsockopt,
2091 	.compat_getsockopt	= compat_tcp_getsockopt,
2092 #endif
2093 };
2094 
2095 static struct inet6_protocol tcpv6_protocol = {
2096 	.handler	=	tcp_v6_rcv,
2097 	.err_handler	=	tcp_v6_err,
2098 	.gso_send_check	=	tcp_v6_gso_send_check,
2099 	.gso_segment	=	tcp_tso_segment,
2100 	.gro_receive	=	tcp6_gro_receive,
2101 	.gro_complete	=	tcp6_gro_complete,
2102 	.flags		=	INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
2103 };
2104 
2105 static struct inet_protosw tcpv6_protosw = {
2106 	.type		=	SOCK_STREAM,
2107 	.protocol	=	IPPROTO_TCP,
2108 	.prot		=	&tcpv6_prot,
2109 	.ops		=	&inet6_stream_ops,
2110 	.capability	=	-1,
2111 	.no_check	=	0,
2112 	.flags		=	INET_PROTOSW_PERMANENT |
2113 				INET_PROTOSW_ICSK,
2114 };
2115 
2116 static int tcpv6_net_init(struct net *net)
2117 {
2118 	return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6,
2119 				    SOCK_RAW, IPPROTO_TCP, net);
2120 }
2121 
2122 static void tcpv6_net_exit(struct net *net)
2123 {
2124 	inet_ctl_sock_destroy(net->ipv6.tcp_sk);
2125 	inet_twsk_purge(net, &tcp_hashinfo, &tcp_death_row, AF_INET6);
2126 }
2127 
2128 static struct pernet_operations tcpv6_net_ops = {
2129 	.init = tcpv6_net_init,
2130 	.exit = tcpv6_net_exit,
2131 };
2132 
2133 int __init tcpv6_init(void)
2134 {
2135 	int ret;
2136 
2137 	ret = inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP);
2138 	if (ret)
2139 		goto out;
2140 
2141 	/* register inet6 protocol */
2142 	ret = inet6_register_protosw(&tcpv6_protosw);
2143 	if (ret)
2144 		goto out_tcpv6_protocol;
2145 
2146 	ret = register_pernet_subsys(&tcpv6_net_ops);
2147 	if (ret)
2148 		goto out_tcpv6_protosw;
2149 out:
2150 	return ret;
2151 
2152 out_tcpv6_protocol:
2153 	inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2154 out_tcpv6_protosw:
2155 	inet6_unregister_protosw(&tcpv6_protosw);
2156 	goto out;
2157 }
2158 
2159 void tcpv6_exit(void)
2160 {
2161 	unregister_pernet_subsys(&tcpv6_net_ops);
2162 	inet6_unregister_protosw(&tcpv6_protosw);
2163 	inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2164 }
2165