aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorRémi Denis-Courmont <remi.denis-courmont@nokia.com>2011-03-08 17:44:11 -0500
committerDavid S. Miller <davem@davemloft.net>2011-03-09 14:59:32 -0500
commitacaf7df610ff3faf1778ce40d601fc3dd4a41b40 (patch)
treea6ed66e7314b43d253dceb5930da6b5fc40d051f /net
parentf7ae8d59f66154df0424fd94035c89981fed3379 (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')
-rw-r--r--net/phonet/pep.c15
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;