diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index ca9cf6853755..301eee726b0f 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -987,6 +987,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
987 | inet_csk(newsk)->icsk_ext_hdr_len = (newnp->opt->opt_nflen + | 987 | inet_csk(newsk)->icsk_ext_hdr_len = (newnp->opt->opt_nflen + |
988 | newnp->opt->opt_flen); | 988 | newnp->opt->opt_flen); |
989 | 989 | ||
990 | tcp_mtup_init(newsk); | ||
990 | tcp_sync_mss(newsk, dst_mtu(dst)); | 991 | tcp_sync_mss(newsk, dst_mtu(dst)); |
991 | newtp->advmss = dst_metric(dst, RTAX_ADVMSS); | 992 | newtp->advmss = dst_metric(dst, RTAX_ADVMSS); |
992 | tcp_initialize_rcv_mss(newsk); | 993 | tcp_initialize_rcv_mss(newsk); |
@@ -1297,18 +1298,21 @@ static int tcp_v6_remember_stamp(struct sock *sk) | |||
1297 | } | 1298 | } |
1298 | 1299 | ||
1299 | static struct inet_connection_sock_af_ops ipv6_specific = { | 1300 | static struct inet_connection_sock_af_ops ipv6_specific = { |
1300 | .queue_xmit = inet6_csk_xmit, | 1301 | .queue_xmit = inet6_csk_xmit, |
1301 | .send_check = tcp_v6_send_check, | 1302 | .send_check = tcp_v6_send_check, |
1302 | .rebuild_header = inet6_sk_rebuild_header, | 1303 | .rebuild_header = inet6_sk_rebuild_header, |
1303 | .conn_request = tcp_v6_conn_request, | 1304 | .conn_request = tcp_v6_conn_request, |
1304 | .syn_recv_sock = tcp_v6_syn_recv_sock, | 1305 | .syn_recv_sock = tcp_v6_syn_recv_sock, |
1305 | .remember_stamp = tcp_v6_remember_stamp, | 1306 | .remember_stamp = tcp_v6_remember_stamp, |
1306 | .net_header_len = sizeof(struct ipv6hdr), | 1307 | .net_header_len = sizeof(struct ipv6hdr), |
1307 | 1308 | .setsockopt = ipv6_setsockopt, | |
1308 | .setsockopt = ipv6_setsockopt, | 1309 | .getsockopt = ipv6_getsockopt, |
1309 | .getsockopt = ipv6_getsockopt, | 1310 | .addr2sockaddr = inet6_csk_addr2sockaddr, |
1310 | .addr2sockaddr = inet6_csk_addr2sockaddr, | 1311 | .sockaddr_len = sizeof(struct sockaddr_in6), |
1311 | .sockaddr_len = sizeof(struct sockaddr_in6) | 1312 | #ifdef CONFIG_COMPAT |
1313 | .compat_setsockopt = compat_ipv6_setsockopt, | ||
1314 | .compat_getsockopt = compat_ipv6_getsockopt, | ||
1315 | #endif | ||
1312 | }; | 1316 | }; |
1313 | 1317 | ||
1314 | /* | 1318 | /* |
@@ -1316,22 +1320,23 @@ static struct inet_connection_sock_af_ops ipv6_specific = { | |||
1316 | */ | 1320 | */ |
1317 | 1321 | ||
1318 | static struct inet_connection_sock_af_ops ipv6_mapped = { | 1322 | static struct inet_connection_sock_af_ops ipv6_mapped = { |
1319 | .queue_xmit = ip_queue_xmit, | 1323 | .queue_xmit = ip_queue_xmit, |
1320 | .send_check = tcp_v4_send_check, | 1324 | .send_check = tcp_v4_send_check, |
1321 | .rebuild_header = inet_sk_rebuild_header, | 1325 | .rebuild_header = inet_sk_rebuild_header, |
1322 | .conn_request = tcp_v6_conn_request, | 1326 | .conn_request = tcp_v6_conn_request, |
1323 | .syn_recv_sock = tcp_v6_syn_recv_sock, | 1327 | .syn_recv_sock = tcp_v6_syn_recv_sock, |
1324 | .remember_stamp = tcp_v4_remember_stamp, | 1328 | .remember_stamp = tcp_v4_remember_stamp, |
1325 | .net_header_len = sizeof(struct iphdr), | 1329 | .net_header_len = sizeof(struct iphdr), |
1326 | 1330 | .setsockopt = ipv6_setsockopt, | |
1327 | .setsockopt = ipv6_setsockopt, | 1331 | .getsockopt = ipv6_getsockopt, |
1328 | .getsockopt = ipv6_getsockopt, | 1332 | .addr2sockaddr = inet6_csk_addr2sockaddr, |
1329 | .addr2sockaddr = inet6_csk_addr2sockaddr, | 1333 | .sockaddr_len = sizeof(struct sockaddr_in6), |
1330 | .sockaddr_len = sizeof(struct sockaddr_in6) | 1334 | #ifdef CONFIG_COMPAT |
1335 | .compat_setsockopt = compat_ipv6_setsockopt, | ||
1336 | .compat_getsockopt = compat_ipv6_getsockopt, | ||
1337 | #endif | ||
1331 | }; | 1338 | }; |
1332 | 1339 | ||
1333 | |||
1334 | |||
1335 | /* NOTE: A lot of things set to zero explicitly by call to | 1340 | /* NOTE: A lot of things set to zero explicitly by call to |
1336 | * sk_alloc() so need not be done here. | 1341 | * sk_alloc() so need not be done here. |
1337 | */ | 1342 | */ |
@@ -1583,6 +1588,10 @@ struct proto tcpv6_prot = { | |||
1583 | .obj_size = sizeof(struct tcp6_sock), | 1588 | .obj_size = sizeof(struct tcp6_sock), |
1584 | .twsk_prot = &tcp6_timewait_sock_ops, | 1589 | .twsk_prot = &tcp6_timewait_sock_ops, |
1585 | .rsk_prot = &tcp6_request_sock_ops, | 1590 | .rsk_prot = &tcp6_request_sock_ops, |
1591 | #ifdef CONFIG_COMPAT | ||
1592 | .compat_setsockopt = compat_tcp_setsockopt, | ||
1593 | .compat_getsockopt = compat_tcp_getsockopt, | ||
1594 | #endif | ||
1586 | }; | 1595 | }; |
1587 | 1596 | ||
1588 | static struct inet6_protocol tcpv6_protocol = { | 1597 | static struct inet6_protocol tcpv6_protocol = { |
@@ -1604,21 +1613,12 @@ static struct inet_protosw tcpv6_protosw = { | |||
1604 | 1613 | ||
1605 | void __init tcpv6_init(void) | 1614 | void __init tcpv6_init(void) |
1606 | { | 1615 | { |
1607 | int err; | ||
1608 | |||
1609 | /* register inet6 protocol */ | 1616 | /* register inet6 protocol */ |
1610 | if (inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP) < 0) | 1617 | if (inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP) < 0) |
1611 | printk(KERN_ERR "tcpv6_init: Could not register protocol\n"); | 1618 | printk(KERN_ERR "tcpv6_init: Could not register protocol\n"); |
1612 | inet6_register_protosw(&tcpv6_protosw); | 1619 | inet6_register_protosw(&tcpv6_protosw); |
1613 | 1620 | ||
1614 | err = sock_create_kern(PF_INET6, SOCK_RAW, IPPROTO_TCP, &tcp6_socket); | 1621 | if (inet_csk_ctl_sock_create(&tcp6_socket, PF_INET6, SOCK_RAW, |
1615 | if (err < 0) | 1622 | IPPROTO_TCP) < 0) |
1616 | panic("Failed to create the TCPv6 control socket.\n"); | 1623 | panic("Failed to create the TCPv6 control socket.\n"); |
1617 | tcp6_socket->sk->sk_allocation = GFP_ATOMIC; | ||
1618 | |||
1619 | /* Unhash it so that IP input processing does not even | ||
1620 | * see it, we do not wish this socket to see incoming | ||
1621 | * packets. | ||
1622 | */ | ||
1623 | tcp6_socket->sk->sk_prot->unhash(tcp6_socket->sk); | ||
1624 | } | 1624 | } |