diff options
Diffstat (limited to 'net/ipv4/tcp.c')
| -rw-r--r-- | net/ipv4/tcp.c | 79 |
1 files changed, 43 insertions, 36 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 6596b4feeddc..176e11aaea77 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
| @@ -315,7 +315,6 @@ struct tcp_splice_state { | |||
| 315 | * is strict, actions are advisory and have some latency. | 315 | * is strict, actions are advisory and have some latency. |
| 316 | */ | 316 | */ |
| 317 | int tcp_memory_pressure __read_mostly; | 317 | int tcp_memory_pressure __read_mostly; |
| 318 | |||
| 319 | EXPORT_SYMBOL(tcp_memory_pressure); | 318 | EXPORT_SYMBOL(tcp_memory_pressure); |
| 320 | 319 | ||
| 321 | void tcp_enter_memory_pressure(struct sock *sk) | 320 | void tcp_enter_memory_pressure(struct sock *sk) |
| @@ -325,7 +324,6 @@ void tcp_enter_memory_pressure(struct sock *sk) | |||
| 325 | tcp_memory_pressure = 1; | 324 | tcp_memory_pressure = 1; |
| 326 | } | 325 | } |
| 327 | } | 326 | } |
| 328 | |||
| 329 | EXPORT_SYMBOL(tcp_enter_memory_pressure); | 327 | EXPORT_SYMBOL(tcp_enter_memory_pressure); |
| 330 | 328 | ||
| 331 | /* Convert seconds to retransmits based on initial and max timeout */ | 329 | /* Convert seconds to retransmits based on initial and max timeout */ |
| @@ -460,6 +458,7 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait) | |||
| 460 | } | 458 | } |
| 461 | return mask; | 459 | return mask; |
| 462 | } | 460 | } |
| 461 | EXPORT_SYMBOL(tcp_poll); | ||
| 463 | 462 | ||
| 464 | int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg) | 463 | int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg) |
| 465 | { | 464 | { |
| @@ -508,10 +507,11 @@ int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg) | |||
| 508 | 507 | ||
| 509 | return put_user(answ, (int __user *)arg); | 508 | return put_user(answ, (int __user *)arg); |
| 510 | } | 509 | } |
| 510 | EXPORT_SYMBOL(tcp_ioctl); | ||
| 511 | 511 | ||
| 512 | static inline void tcp_mark_push(struct tcp_sock *tp, struct sk_buff *skb) | 512 | static inline void tcp_mark_push(struct tcp_sock *tp, struct sk_buff *skb) |
| 513 | { | 513 | { |
| 514 | TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH; | 514 | TCP_SKB_CB(skb)->flags |= TCPHDR_PSH; |
| 515 | tp->pushed_seq = tp->write_seq; | 515 | tp->pushed_seq = tp->write_seq; |
| 516 | } | 516 | } |
| 517 | 517 | ||
| @@ -527,7 +527,7 @@ static inline void skb_entail(struct sock *sk, struct sk_buff *skb) | |||
| 527 | 527 | ||
| 528 | skb->csum = 0; | 528 | skb->csum = 0; |
| 529 | tcb->seq = tcb->end_seq = tp->write_seq; | 529 | tcb->seq = tcb->end_seq = tp->write_seq; |
| 530 | tcb->flags = TCPCB_FLAG_ACK; | 530 | tcb->flags = TCPHDR_ACK; |
| 531 | tcb->sacked = 0; | 531 | tcb->sacked = 0; |
| 532 | skb_header_release(skb); | 532 | skb_header_release(skb); |
| 533 | tcp_add_write_queue_tail(sk, skb); | 533 | tcp_add_write_queue_tail(sk, skb); |
| @@ -608,6 +608,7 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos, | |||
| 608 | ssize_t spliced; | 608 | ssize_t spliced; |
| 609 | int ret; | 609 | int ret; |
| 610 | 610 | ||
| 611 | sock_rps_record_flow(sk); | ||
| 611 | /* | 612 | /* |
| 612 | * We can't seek on a socket input | 613 | * We can't seek on a socket input |
| 613 | */ | 614 | */ |
| @@ -675,6 +676,7 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos, | |||
| 675 | 676 | ||
| 676 | return ret; | 677 | return ret; |
| 677 | } | 678 | } |
| 679 | EXPORT_SYMBOL(tcp_splice_read); | ||
| 678 | 680 | ||
| 679 | struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp) | 681 | struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp) |
| 680 | { | 682 | { |
| @@ -815,7 +817,7 @@ new_segment: | |||
| 815 | skb_shinfo(skb)->gso_segs = 0; | 817 | skb_shinfo(skb)->gso_segs = 0; |
| 816 | 818 | ||
| 817 | if (!copied) | 819 | if (!copied) |
| 818 | TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_PSH; | 820 | TCP_SKB_CB(skb)->flags &= ~TCPHDR_PSH; |
| 819 | 821 | ||
| 820 | copied += copy; | 822 | copied += copy; |
| 821 | poffset += copy; | 823 | poffset += copy; |
| @@ -856,15 +858,15 @@ out_err: | |||
| 856 | return sk_stream_error(sk, flags, err); | 858 | return sk_stream_error(sk, flags, err); |
| 857 | } | 859 | } |
| 858 | 860 | ||
| 859 | ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset, | 861 | int tcp_sendpage(struct sock *sk, struct page *page, int offset, |
| 860 | size_t size, int flags) | 862 | size_t size, int flags) |
| 861 | { | 863 | { |
| 862 | ssize_t res; | 864 | ssize_t res; |
| 863 | struct sock *sk = sock->sk; | ||
| 864 | 865 | ||
| 865 | if (!(sk->sk_route_caps & NETIF_F_SG) || | 866 | if (!(sk->sk_route_caps & NETIF_F_SG) || |
| 866 | !(sk->sk_route_caps & NETIF_F_ALL_CSUM)) | 867 | !(sk->sk_route_caps & NETIF_F_ALL_CSUM)) |
| 867 | return sock_no_sendpage(sock, page, offset, size, flags); | 868 | return sock_no_sendpage(sk->sk_socket, page, offset, size, |
| 869 | flags); | ||
| 868 | 870 | ||
| 869 | lock_sock(sk); | 871 | lock_sock(sk); |
| 870 | TCP_CHECK_TIMER(sk); | 872 | TCP_CHECK_TIMER(sk); |
| @@ -873,6 +875,7 @@ ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset, | |||
| 873 | release_sock(sk); | 875 | release_sock(sk); |
| 874 | return res; | 876 | return res; |
| 875 | } | 877 | } |
| 878 | EXPORT_SYMBOL(tcp_sendpage); | ||
| 876 | 879 | ||
| 877 | #define TCP_PAGE(sk) (sk->sk_sndmsg_page) | 880 | #define TCP_PAGE(sk) (sk->sk_sndmsg_page) |
| 878 | #define TCP_OFF(sk) (sk->sk_sndmsg_off) | 881 | #define TCP_OFF(sk) (sk->sk_sndmsg_off) |
| @@ -897,10 +900,9 @@ static inline int select_size(struct sock *sk, int sg) | |||
| 897 | return tmp; | 900 | return tmp; |
| 898 | } | 901 | } |
| 899 | 902 | ||
| 900 | int tcp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, | 903 | int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
| 901 | size_t size) | 904 | size_t size) |
| 902 | { | 905 | { |
| 903 | struct sock *sk = sock->sk; | ||
| 904 | struct iovec *iov; | 906 | struct iovec *iov; |
| 905 | struct tcp_sock *tp = tcp_sk(sk); | 907 | struct tcp_sock *tp = tcp_sk(sk); |
| 906 | struct sk_buff *skb; | 908 | struct sk_buff *skb; |
| @@ -1061,7 +1063,7 @@ new_segment: | |||
| 1061 | } | 1063 | } |
| 1062 | 1064 | ||
| 1063 | if (!copied) | 1065 | if (!copied) |
| 1064 | TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_PSH; | 1066 | TCP_SKB_CB(skb)->flags &= ~TCPHDR_PSH; |
| 1065 | 1067 | ||
| 1066 | tp->write_seq += copy; | 1068 | tp->write_seq += copy; |
| 1067 | TCP_SKB_CB(skb)->end_seq += copy; | 1069 | TCP_SKB_CB(skb)->end_seq += copy; |
| @@ -1121,6 +1123,7 @@ out_err: | |||
| 1121 | release_sock(sk); | 1123 | release_sock(sk); |
| 1122 | return err; | 1124 | return err; |
| 1123 | } | 1125 | } |
| 1126 | EXPORT_SYMBOL(tcp_sendmsg); | ||
| 1124 | 1127 | ||
| 1125 | /* | 1128 | /* |
| 1126 | * Handle reading urgent data. BSD has very simple semantics for | 1129 | * Handle reading urgent data. BSD has very simple semantics for |
| @@ -1380,6 +1383,7 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc, | |||
| 1380 | tcp_cleanup_rbuf(sk, copied); | 1383 | tcp_cleanup_rbuf(sk, copied); |
| 1381 | return copied; | 1384 | return copied; |
| 1382 | } | 1385 | } |
| 1386 | EXPORT_SYMBOL(tcp_read_sock); | ||
| 1383 | 1387 | ||
| 1384 | /* | 1388 | /* |
| 1385 | * This routine copies from a sock struct into the user buffer. | 1389 | * This routine copies from a sock struct into the user buffer. |
| @@ -1774,6 +1778,7 @@ recv_urg: | |||
| 1774 | err = tcp_recv_urg(sk, msg, len, flags); | 1778 | err = tcp_recv_urg(sk, msg, len, flags); |
| 1775 | goto out; | 1779 | goto out; |
| 1776 | } | 1780 | } |
| 1781 | EXPORT_SYMBOL(tcp_recvmsg); | ||
| 1777 | 1782 | ||
| 1778 | void tcp_set_state(struct sock *sk, int state) | 1783 | void tcp_set_state(struct sock *sk, int state) |
| 1779 | { | 1784 | { |
| @@ -1866,6 +1871,7 @@ void tcp_shutdown(struct sock *sk, int how) | |||
| 1866 | tcp_send_fin(sk); | 1871 | tcp_send_fin(sk); |
| 1867 | } | 1872 | } |
| 1868 | } | 1873 | } |
| 1874 | EXPORT_SYMBOL(tcp_shutdown); | ||
| 1869 | 1875 | ||
| 1870 | void tcp_close(struct sock *sk, long timeout) | 1876 | void tcp_close(struct sock *sk, long timeout) |
| 1871 | { | 1877 | { |
| @@ -1898,6 +1904,10 @@ void tcp_close(struct sock *sk, long timeout) | |||
| 1898 | 1904 | ||
| 1899 | sk_mem_reclaim(sk); | 1905 | sk_mem_reclaim(sk); |
| 1900 | 1906 | ||
| 1907 | /* If socket has been already reset (e.g. in tcp_reset()) - kill it. */ | ||
| 1908 | if (sk->sk_state == TCP_CLOSE) | ||
| 1909 | goto adjudge_to_death; | ||
| 1910 | |||
| 1901 | /* As outlined in RFC 2525, section 2.17, we send a RST here because | 1911 | /* As outlined in RFC 2525, section 2.17, we send a RST here because |
| 1902 | * data was lost. To witness the awful effects of the old behavior of | 1912 | * data was lost. To witness the awful effects of the old behavior of |
| 1903 | * always doing a FIN, run an older 2.1.x kernel or 2.0.x, start a bulk | 1913 | * always doing a FIN, run an older 2.1.x kernel or 2.0.x, start a bulk |
| @@ -2025,6 +2035,7 @@ out: | |||
| 2025 | local_bh_enable(); | 2035 | local_bh_enable(); |
| 2026 | sock_put(sk); | 2036 | sock_put(sk); |
| 2027 | } | 2037 | } |
| 2038 | EXPORT_SYMBOL(tcp_close); | ||
| 2028 | 2039 | ||
| 2029 | /* These states need RST on ABORT according to RFC793 */ | 2040 | /* These states need RST on ABORT according to RFC793 */ |
| 2030 | 2041 | ||
| @@ -2098,6 +2109,7 @@ int tcp_disconnect(struct sock *sk, int flags) | |||
| 2098 | sk->sk_error_report(sk); | 2109 | sk->sk_error_report(sk); |
| 2099 | return err; | 2110 | return err; |
| 2100 | } | 2111 | } |
| 2112 | EXPORT_SYMBOL(tcp_disconnect); | ||
| 2101 | 2113 | ||
| 2102 | /* | 2114 | /* |
| 2103 | * Socket option code for TCP. | 2115 | * Socket option code for TCP. |
| @@ -2175,6 +2187,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
| 2175 | GFP_KERNEL); | 2187 | GFP_KERNEL); |
| 2176 | if (cvp == NULL) | 2188 | if (cvp == NULL) |
| 2177 | return -ENOMEM; | 2189 | return -ENOMEM; |
| 2190 | |||
| 2191 | kref_init(&cvp->kref); | ||
| 2178 | } | 2192 | } |
| 2179 | lock_sock(sk); | 2193 | lock_sock(sk); |
| 2180 | tp->rx_opt.cookie_in_always = | 2194 | tp->rx_opt.cookie_in_always = |
| @@ -2189,12 +2203,11 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
| 2189 | */ | 2203 | */ |
| 2190 | kref_put(&tp->cookie_values->kref, | 2204 | kref_put(&tp->cookie_values->kref, |
| 2191 | tcp_cookie_values_release); | 2205 | tcp_cookie_values_release); |
| 2192 | kref_init(&cvp->kref); | ||
| 2193 | tp->cookie_values = cvp; | ||
| 2194 | } else { | 2206 | } else { |
| 2195 | cvp = tp->cookie_values; | 2207 | cvp = tp->cookie_values; |
| 2196 | } | 2208 | } |
| 2197 | } | 2209 | } |
| 2210 | |||
| 2198 | if (cvp != NULL) { | 2211 | if (cvp != NULL) { |
| 2199 | cvp->cookie_desired = ctd.tcpct_cookie_desired; | 2212 | cvp->cookie_desired = ctd.tcpct_cookie_desired; |
| 2200 | 2213 | ||
| @@ -2208,6 +2221,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level, | |||
| 2208 | cvp->s_data_desired = ctd.tcpct_s_data_desired; | 2221 | cvp->s_data_desired = ctd.tcpct_s_data_desired; |
| 2209 | cvp->s_data_constant = 0; /* false */ | 2222 | cvp->s_data_constant = 0; /* false */ |
| 2210 | } | 2223 | } |
| 2224 | |||
| 2225 | tp->cookie_values = cvp; | ||
| 2211 | } | 2226 | } |
| 2212 | release_sock(sk); | 2227 | release_sock(sk); |
| 2213 | return err; | 2228 | return err; |
| @@ -2396,6 +2411,7 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, | |||
| 2396 | optval, optlen); | 2411 | optval, optlen); |
| 2397 | return do_tcp_setsockopt(sk, level, optname, optval, optlen); | 2412 | return do_tcp_setsockopt(sk, level, optname, optval, optlen); |
| 2398 | } | 2413 | } |
| 2414 | EXPORT_SYMBOL(tcp_setsockopt); | ||
| 2399 | 2415 | ||
| 2400 | #ifdef CONFIG_COMPAT | 2416 | #ifdef CONFIG_COMPAT |
| 2401 | int compat_tcp_setsockopt(struct sock *sk, int level, int optname, | 2417 | int compat_tcp_setsockopt(struct sock *sk, int level, int optname, |
| @@ -2406,7 +2422,6 @@ int compat_tcp_setsockopt(struct sock *sk, int level, int optname, | |||
| 2406 | optval, optlen); | 2422 | optval, optlen); |
| 2407 | return do_tcp_setsockopt(sk, level, optname, optval, optlen); | 2423 | return do_tcp_setsockopt(sk, level, optname, optval, optlen); |
| 2408 | } | 2424 | } |
| 2409 | |||
| 2410 | EXPORT_SYMBOL(compat_tcp_setsockopt); | 2425 | EXPORT_SYMBOL(compat_tcp_setsockopt); |
| 2411 | #endif | 2426 | #endif |
| 2412 | 2427 | ||
| @@ -2472,7 +2487,6 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) | |||
| 2472 | 2487 | ||
| 2473 | info->tcpi_total_retrans = tp->total_retrans; | 2488 | info->tcpi_total_retrans = tp->total_retrans; |
| 2474 | } | 2489 | } |
| 2475 | |||
| 2476 | EXPORT_SYMBOL_GPL(tcp_get_info); | 2490 | EXPORT_SYMBOL_GPL(tcp_get_info); |
| 2477 | 2491 | ||
| 2478 | static int do_tcp_getsockopt(struct sock *sk, int level, | 2492 | static int do_tcp_getsockopt(struct sock *sk, int level, |
| @@ -2590,6 +2604,12 @@ static int do_tcp_getsockopt(struct sock *sk, int level, | |||
| 2590 | return -EFAULT; | 2604 | return -EFAULT; |
| 2591 | return 0; | 2605 | return 0; |
| 2592 | } | 2606 | } |
| 2607 | case TCP_THIN_LINEAR_TIMEOUTS: | ||
| 2608 | val = tp->thin_lto; | ||
| 2609 | break; | ||
| 2610 | case TCP_THIN_DUPACK: | ||
| 2611 | val = tp->thin_dupack; | ||
| 2612 | break; | ||
| 2593 | default: | 2613 | default: |
| 2594 | return -ENOPROTOOPT; | 2614 | return -ENOPROTOOPT; |
| 2595 | } | 2615 | } |
| @@ -2611,6 +2631,7 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval, | |||
| 2611 | optval, optlen); | 2631 | optval, optlen); |
| 2612 | return do_tcp_getsockopt(sk, level, optname, optval, optlen); | 2632 | return do_tcp_getsockopt(sk, level, optname, optval, optlen); |
| 2613 | } | 2633 | } |
| 2634 | EXPORT_SYMBOL(tcp_getsockopt); | ||
| 2614 | 2635 | ||
| 2615 | #ifdef CONFIG_COMPAT | 2636 | #ifdef CONFIG_COMPAT |
| 2616 | int compat_tcp_getsockopt(struct sock *sk, int level, int optname, | 2637 | int compat_tcp_getsockopt(struct sock *sk, int level, int optname, |
| @@ -2621,7 +2642,6 @@ int compat_tcp_getsockopt(struct sock *sk, int level, int optname, | |||
| 2621 | optval, optlen); | 2642 | optval, optlen); |
| 2622 | return do_tcp_getsockopt(sk, level, optname, optval, optlen); | 2643 | return do_tcp_getsockopt(sk, level, optname, optval, optlen); |
| 2623 | } | 2644 | } |
| 2624 | |||
| 2625 | EXPORT_SYMBOL(compat_tcp_getsockopt); | 2645 | EXPORT_SYMBOL(compat_tcp_getsockopt); |
| 2626 | #endif | 2646 | #endif |
| 2627 | 2647 | ||
| @@ -2858,7 +2878,6 @@ void tcp_free_md5sig_pool(void) | |||
| 2858 | if (pool) | 2878 | if (pool) |
| 2859 | __tcp_free_md5sig_pool(pool); | 2879 | __tcp_free_md5sig_pool(pool); |
| 2860 | } | 2880 | } |
| 2861 | |||
| 2862 | EXPORT_SYMBOL(tcp_free_md5sig_pool); | 2881 | EXPORT_SYMBOL(tcp_free_md5sig_pool); |
| 2863 | 2882 | ||
| 2864 | static struct tcp_md5sig_pool * __percpu * | 2883 | static struct tcp_md5sig_pool * __percpu * |
| @@ -2934,7 +2953,6 @@ retry: | |||
| 2934 | } | 2953 | } |
| 2935 | return pool; | 2954 | return pool; |
| 2936 | } | 2955 | } |
| 2937 | |||
| 2938 | EXPORT_SYMBOL(tcp_alloc_md5sig_pool); | 2956 | EXPORT_SYMBOL(tcp_alloc_md5sig_pool); |
| 2939 | 2957 | ||
| 2940 | 2958 | ||
| @@ -2958,7 +2976,7 @@ struct tcp_md5sig_pool *tcp_get_md5sig_pool(void) | |||
| 2958 | spin_unlock(&tcp_md5sig_pool_lock); | 2976 | spin_unlock(&tcp_md5sig_pool_lock); |
| 2959 | 2977 | ||
| 2960 | if (p) | 2978 | if (p) |
| 2961 | return *per_cpu_ptr(p, smp_processor_id()); | 2979 | return *this_cpu_ptr(p); |
| 2962 | 2980 | ||
| 2963 | local_bh_enable(); | 2981 | local_bh_enable(); |
| 2964 | return NULL; | 2982 | return NULL; |
| @@ -2986,7 +3004,6 @@ int tcp_md5_hash_header(struct tcp_md5sig_pool *hp, | |||
| 2986 | th->check = old_checksum; | 3004 | th->check = old_checksum; |
| 2987 | return err; | 3005 | return err; |
| 2988 | } | 3006 | } |
| 2989 | |||
| 2990 | EXPORT_SYMBOL(tcp_md5_hash_header); | 3007 | EXPORT_SYMBOL(tcp_md5_hash_header); |
| 2991 | 3008 | ||
| 2992 | int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp, | 3009 | int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp, |
| @@ -2999,6 +3016,7 @@ int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp, | |||
| 2999 | const unsigned head_data_len = skb_headlen(skb) > header_len ? | 3016 | const unsigned head_data_len = skb_headlen(skb) > header_len ? |
| 3000 | skb_headlen(skb) - header_len : 0; | 3017 | skb_headlen(skb) - header_len : 0; |
| 3001 | const struct skb_shared_info *shi = skb_shinfo(skb); | 3018 | const struct skb_shared_info *shi = skb_shinfo(skb); |
| 3019 | struct sk_buff *frag_iter; | ||
| 3002 | 3020 | ||
| 3003 | sg_init_table(&sg, 1); | 3021 | sg_init_table(&sg, 1); |
| 3004 | 3022 | ||
| @@ -3013,9 +3031,12 @@ int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp, | |||
| 3013 | return 1; | 3031 | return 1; |
| 3014 | } | 3032 | } |
| 3015 | 3033 | ||
| 3034 | skb_walk_frags(skb, frag_iter) | ||
| 3035 | if (tcp_md5_hash_skb_data(hp, frag_iter, 0)) | ||
| 3036 | return 1; | ||
| 3037 | |||
| 3016 | return 0; | 3038 | return 0; |
| 3017 | } | 3039 | } |
| 3018 | |||
| 3019 | EXPORT_SYMBOL(tcp_md5_hash_skb_data); | 3040 | EXPORT_SYMBOL(tcp_md5_hash_skb_data); |
| 3020 | 3041 | ||
| 3021 | int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, struct tcp_md5sig_key *key) | 3042 | int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, struct tcp_md5sig_key *key) |
| @@ -3025,7 +3046,6 @@ int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, struct tcp_md5sig_key *key) | |||
| 3025 | sg_init_one(&sg, key->key, key->keylen); | 3046 | sg_init_one(&sg, key->key, key->keylen); |
| 3026 | return crypto_hash_update(&hp->md5_desc, &sg, key->keylen); | 3047 | return crypto_hash_update(&hp->md5_desc, &sg, key->keylen); |
| 3027 | } | 3048 | } |
| 3028 | |||
| 3029 | EXPORT_SYMBOL(tcp_md5_hash_key); | 3049 | EXPORT_SYMBOL(tcp_md5_hash_key); |
| 3030 | 3050 | ||
| 3031 | #endif | 3051 | #endif |
| @@ -3297,16 +3317,3 @@ void __init tcp_init(void) | |||
| 3297 | tcp_secret_retiring = &tcp_secret_two; | 3317 | tcp_secret_retiring = &tcp_secret_two; |
| 3298 | tcp_secret_secondary = &tcp_secret_two; | 3318 | tcp_secret_secondary = &tcp_secret_two; |
| 3299 | } | 3319 | } |
| 3300 | |||
| 3301 | EXPORT_SYMBOL(tcp_close); | ||
| 3302 | EXPORT_SYMBOL(tcp_disconnect); | ||
| 3303 | EXPORT_SYMBOL(tcp_getsockopt); | ||
| 3304 | EXPORT_SYMBOL(tcp_ioctl); | ||
| 3305 | EXPORT_SYMBOL(tcp_poll); | ||
| 3306 | EXPORT_SYMBOL(tcp_read_sock); | ||
| 3307 | EXPORT_SYMBOL(tcp_recvmsg); | ||
| 3308 | EXPORT_SYMBOL(tcp_sendmsg); | ||
| 3309 | EXPORT_SYMBOL(tcp_splice_read); | ||
| 3310 | EXPORT_SYMBOL(tcp_sendpage); | ||
| 3311 | EXPORT_SYMBOL(tcp_setsockopt); | ||
| 3312 | EXPORT_SYMBOL(tcp_shutdown); | ||
