diff options
author | Rémi Denis-Courmont <remi.denis-courmont@nokia.com> | 2011-03-08 17:44:11 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-03-09 14:59:32 -0500 |
commit | acaf7df610ff3faf1778ce40d601fc3dd4a41b40 (patch) | |
tree | a6ed66e7314b43d253dceb5930da6b5fc40d051f /net/phonet/pep.c | |
parent | f7ae8d59f66154df0424fd94035c89981fed3379 (diff) |
Phonet: provide pipe socket option to retrieve the pipe identifier
User-space sometimes needs this information. In particular, the GPRS
context or the AT commands pipe setups may use the pipe handle as a
reference.
This removes the settable pipe handle with CONFIG_PHONET_PIPECTRLR.
It did not handle error cases correctly. Furthermore, the kernel
*could* implement a smart scheme for allocating handles (if ever
needed), but userspace really cannot.
Signed-off-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/phonet/pep.c')
-rw-r--r-- | net/phonet/pep.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/net/phonet/pep.c b/net/phonet/pep.c index c0fab4cfcef7..abfb795af142 100644 --- a/net/phonet/pep.c +++ b/net/phonet/pep.c | |||
@@ -853,6 +853,7 @@ static int pep_sock_connect(struct sock *sk, struct sockaddr *addr, int len) | |||
853 | 853 | ||
854 | pn->pn_sk.dobject = pn_sockaddr_get_object(spn); | 854 | pn->pn_sk.dobject = pn_sockaddr_get_object(spn); |
855 | pn->pn_sk.resource = pn_sockaddr_get_resource(spn); | 855 | pn->pn_sk.resource = pn_sockaddr_get_resource(spn); |
856 | pn->pipe_handle = 1; /* anything but INVALID_HANDLE */ | ||
856 | return pipe_handler_request(sk, PNS_PEP_CONNECT_REQ, | 857 | return pipe_handler_request(sk, PNS_PEP_CONNECT_REQ, |
857 | PN_PIPE_DISABLE, data, 4); | 858 | PN_PIPE_DISABLE, data, 4); |
858 | } | 859 | } |
@@ -909,14 +910,6 @@ static int pep_setsockopt(struct sock *sk, int level, int optname, | |||
909 | 910 | ||
910 | lock_sock(sk); | 911 | lock_sock(sk); |
911 | switch (optname) { | 912 | switch (optname) { |
912 | #ifdef CONFIG_PHONET_PIPECTRLR | ||
913 | case PNPIPE_PIPE_HANDLE: | ||
914 | if (val) { | ||
915 | pn->pipe_handle = val; | ||
916 | break; | ||
917 | } | ||
918 | #endif | ||
919 | |||
920 | case PNPIPE_ENCAP: | 913 | case PNPIPE_ENCAP: |
921 | if (val && val != PNPIPE_ENCAP_IP) { | 914 | if (val && val != PNPIPE_ENCAP_IP) { |
922 | err = -EINVAL; | 915 | err = -EINVAL; |
@@ -982,6 +975,12 @@ static int pep_getsockopt(struct sock *sk, int level, int optname, | |||
982 | val = pn->ifindex; | 975 | val = pn->ifindex; |
983 | break; | 976 | break; |
984 | 977 | ||
978 | case PNPIPE_HANDLE: | ||
979 | val = pn->pipe_handle; | ||
980 | if (val == PN_PIPE_INVALID_HANDLE) | ||
981 | return -EINVAL; | ||
982 | break; | ||
983 | |||
985 | #ifdef CONFIG_PHONET_PIPECTRLR | 984 | #ifdef CONFIG_PHONET_PIPECTRLR |
986 | case PNPIPE_ENABLE: | 985 | case PNPIPE_ENABLE: |
987 | val = sk->sk_state == TCP_ESTABLISHED; | 986 | val = sk->sk_state == TCP_ESTABLISHED; |