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); |
