mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
f7ae8d59f6
commit
acaf7df610
|
@ -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.
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue