Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acaf7df6 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont Committed by David S. Miller
Browse files

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: default avatarRémi Denis-Courmont <remi.denis-courmont@nokia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f7ae8d59
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -181,6 +181,10 @@ The pipe protocol provides two socket options at the SOL_PNPIPE level:
    interface index of the network interface created by PNPIPE_ENCAP,
    or zero if encapsulation is off.

  PNPIPE_HANDLE is a read-only integer value. It contains the underlying
    identifier ("pipe handle") of the pipe. This is only defined for
    socket descriptors that are already connected or being connected.


Phonet Pipe-controller Implementation
-------------------------------------
@@ -199,9 +203,6 @@ between itself and a remote pipe-end point (e.g. modem).

The implementation adds socket options at SOL_PNPIPE level:

 PNPIPE_PIPE_HANDLE
	It accepts an integer argument for setting value of pipe handle.

  PNPIPE_ENABLE accepts one integer value (int). If set to zero, the pipe
    is disabled. If the value is non-zero, the pipe is enabled. If the pipe
    is not (yet) connected, ENOTCONN is error is returned.
+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@
/* Socket options for SOL_PNPIPE level */
#define PNPIPE_ENCAP		1
#define PNPIPE_IFINDEX		2
#define PNPIPE_PIPE_HANDLE	3
#define PNPIPE_HANDLE		3
#define PNPIPE_ENABLE           4
/* unused slot */

+7 −8
Original line number Diff line number Diff line
@@ -853,6 +853,7 @@ static int pep_sock_connect(struct sock *sk, struct sockaddr *addr, int len)

	pn->pn_sk.dobject = pn_sockaddr_get_object(spn);
	pn->pn_sk.resource = pn_sockaddr_get_resource(spn);
	pn->pipe_handle = 1; /* anything but INVALID_HANDLE */
	return pipe_handler_request(sk, PNS_PEP_CONNECT_REQ,
					PN_PIPE_DISABLE, data, 4);
}
@@ -909,14 +910,6 @@ static int pep_setsockopt(struct sock *sk, int level, int optname,

	lock_sock(sk);
	switch (optname) {
#ifdef CONFIG_PHONET_PIPECTRLR
	case PNPIPE_PIPE_HANDLE:
		if (val) {
			pn->pipe_handle = val;
			break;
		}
#endif

	case PNPIPE_ENCAP:
		if (val && val != PNPIPE_ENCAP_IP) {
			err = -EINVAL;
@@ -982,6 +975,12 @@ static int pep_getsockopt(struct sock *sk, int level, int optname,
		val = pn->ifindex;
		break;

	case PNPIPE_HANDLE:
		val = pn->pipe_handle;
		if (val == PN_PIPE_INVALID_HANDLE)
			return -EINVAL;
		break;

#ifdef CONFIG_PHONET_PIPECTRLR
	case PNPIPE_ENABLE:
		val = sk->sk_state == TCP_ESTABLISHED;