diff options
Diffstat (limited to 'net/ipv4/inet_connection_sock.c')
-rw-r--r-- | net/ipv4/inet_connection_sock.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index ae20281d8deb..9a01bb81f8bf 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
@@ -648,3 +648,52 @@ void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr) | |||
648 | } | 648 | } |
649 | 649 | ||
650 | EXPORT_SYMBOL_GPL(inet_csk_addr2sockaddr); | 650 | EXPORT_SYMBOL_GPL(inet_csk_addr2sockaddr); |
651 | |||
652 | int inet_csk_ctl_sock_create(struct socket **sock, unsigned short family, | ||
653 | unsigned short type, unsigned char protocol) | ||
654 | { | ||
655 | int rc = sock_create_kern(family, type, protocol, sock); | ||
656 | |||
657 | if (rc == 0) { | ||
658 | (*sock)->sk->sk_allocation = GFP_ATOMIC; | ||
659 | inet_sk((*sock)->sk)->uc_ttl = -1; | ||
660 | /* | ||
661 | * Unhash it so that IP input processing does not even see it, | ||
662 | * we do not wish this socket to see incoming packets. | ||
663 | */ | ||
664 | (*sock)->sk->sk_prot->unhash((*sock)->sk); | ||
665 | } | ||
666 | return rc; | ||
667 | } | ||
668 | |||
669 | EXPORT_SYMBOL_GPL(inet_csk_ctl_sock_create); | ||
670 | |||
671 | #ifdef CONFIG_COMPAT | ||
672 | int inet_csk_compat_getsockopt(struct sock *sk, int level, int optname, | ||
673 | char __user *optval, int __user *optlen) | ||
674 | { | ||
675 | const struct inet_connection_sock *icsk = inet_csk(sk); | ||
676 | |||
677 | if (icsk->icsk_af_ops->compat_getsockopt != NULL) | ||
678 | return icsk->icsk_af_ops->compat_getsockopt(sk, level, optname, | ||
679 | optval, optlen); | ||
680 | return icsk->icsk_af_ops->getsockopt(sk, level, optname, | ||
681 | optval, optlen); | ||
682 | } | ||
683 | |||
684 | EXPORT_SYMBOL_GPL(inet_csk_compat_getsockopt); | ||
685 | |||
686 | int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, | ||
687 | char __user *optval, int optlen) | ||
688 | { | ||
689 | const struct inet_connection_sock *icsk = inet_csk(sk); | ||
690 | |||
691 | if (icsk->icsk_af_ops->compat_setsockopt != NULL) | ||
692 | return icsk->icsk_af_ops->compat_setsockopt(sk, level, optname, | ||
693 | optval, optlen); | ||
694 | return icsk->icsk_af_ops->setsockopt(sk, level, optname, | ||
695 | optval, optlen); | ||
696 | } | ||
697 | |||
698 | EXPORT_SYMBOL_GPL(inet_csk_compat_setsockopt); | ||
699 | #endif | ||