diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 233bdf259965..9e85c0416109 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -900,6 +900,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
900 | inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen; | 900 | inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen; |
901 | newinet->id = newtp->write_seq ^ jiffies; | 901 | newinet->id = newtp->write_seq ^ jiffies; |
902 | 902 | ||
903 | tcp_mtup_init(newsk); | ||
903 | tcp_sync_mss(newsk, dst_mtu(dst)); | 904 | tcp_sync_mss(newsk, dst_mtu(dst)); |
904 | newtp->advmss = dst_metric(dst, RTAX_ADVMSS); | 905 | newtp->advmss = dst_metric(dst, RTAX_ADVMSS); |
905 | tcp_initialize_rcv_mss(newsk); | 906 | tcp_initialize_rcv_mss(newsk); |
@@ -1216,17 +1217,21 @@ int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw) | |||
1216 | } | 1217 | } |
1217 | 1218 | ||
1218 | struct inet_connection_sock_af_ops ipv4_specific = { | 1219 | struct inet_connection_sock_af_ops ipv4_specific = { |
1219 | .queue_xmit = ip_queue_xmit, | 1220 | .queue_xmit = ip_queue_xmit, |
1220 | .send_check = tcp_v4_send_check, | 1221 | .send_check = tcp_v4_send_check, |
1221 | .rebuild_header = inet_sk_rebuild_header, | 1222 | .rebuild_header = inet_sk_rebuild_header, |
1222 | .conn_request = tcp_v4_conn_request, | 1223 | .conn_request = tcp_v4_conn_request, |
1223 | .syn_recv_sock = tcp_v4_syn_recv_sock, | 1224 | .syn_recv_sock = tcp_v4_syn_recv_sock, |
1224 | .remember_stamp = tcp_v4_remember_stamp, | 1225 | .remember_stamp = tcp_v4_remember_stamp, |
1225 | .net_header_len = sizeof(struct iphdr), | 1226 | .net_header_len = sizeof(struct iphdr), |
1226 | .setsockopt = ip_setsockopt, | 1227 | .setsockopt = ip_setsockopt, |
1227 | .getsockopt = ip_getsockopt, | 1228 | .getsockopt = ip_getsockopt, |
1228 | .addr2sockaddr = inet_csk_addr2sockaddr, | 1229 | .addr2sockaddr = inet_csk_addr2sockaddr, |
1229 | .sockaddr_len = sizeof(struct sockaddr_in), | 1230 | .sockaddr_len = sizeof(struct sockaddr_in), |
1231 | #ifdef CONFIG_COMPAT | ||
1232 | .compat_setsockopt = compat_ip_setsockopt, | ||
1233 | .compat_getsockopt = compat_ip_getsockopt, | ||
1234 | #endif | ||
1230 | }; | 1235 | }; |
1231 | 1236 | ||
1232 | /* NOTE: A lot of things set to zero explicitly by call to | 1237 | /* NOTE: A lot of things set to zero explicitly by call to |
@@ -1825,23 +1830,16 @@ struct proto tcp_prot = { | |||
1825 | .obj_size = sizeof(struct tcp_sock), | 1830 | .obj_size = sizeof(struct tcp_sock), |
1826 | .twsk_prot = &tcp_timewait_sock_ops, | 1831 | .twsk_prot = &tcp_timewait_sock_ops, |
1827 | .rsk_prot = &tcp_request_sock_ops, | 1832 | .rsk_prot = &tcp_request_sock_ops, |
1833 | #ifdef CONFIG_COMPAT | ||
1834 | .compat_setsockopt = compat_tcp_setsockopt, | ||
1835 | .compat_getsockopt = compat_tcp_getsockopt, | ||
1836 | #endif | ||
1828 | }; | 1837 | }; |
1829 | 1838 | ||
1830 | |||
1831 | |||
1832 | void __init tcp_v4_init(struct net_proto_family *ops) | 1839 | void __init tcp_v4_init(struct net_proto_family *ops) |
1833 | { | 1840 | { |
1834 | int err = sock_create_kern(PF_INET, SOCK_RAW, IPPROTO_TCP, &tcp_socket); | 1841 | if (inet_csk_ctl_sock_create(&tcp_socket, PF_INET, SOCK_RAW, IPPROTO_TCP) < 0) |
1835 | if (err < 0) | ||
1836 | panic("Failed to create the TCP control socket.\n"); | 1842 | panic("Failed to create the TCP control socket.\n"); |
1837 | tcp_socket->sk->sk_allocation = GFP_ATOMIC; | ||
1838 | inet_sk(tcp_socket->sk)->uc_ttl = -1; | ||
1839 | |||
1840 | /* Unhash it so that IP input processing does not even | ||
1841 | * see it, we do not wish this socket to see incoming | ||
1842 | * packets. | ||
1843 | */ | ||
1844 | tcp_socket->sk->sk_prot->unhash(tcp_socket->sk); | ||
1845 | } | 1843 | } |
1846 | 1844 | ||
1847 | EXPORT_SYMBOL(ipv4_specific); | 1845 | EXPORT_SYMBOL(ipv4_specific); |