Phonet: hook resource routing to userspace via ioctl()'s
I wish we could use something cleaner, such as bind(). But that would not work since resource subscription is orthogonal/in addition to the normal object ID allocated via bind(). This is similar to multicasting which also uses ioctl()'s. 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
4e3d16ce5e
commit
7417fa83c1
|
@ -47,6 +47,8 @@
|
|||
|
||||
/* ioctls */
|
||||
#define SIOCPNGETOBJECT (SIOCPROTOPRIVATE + 0)
|
||||
#define SIOCPNADDRESOURCE (SIOCPROTOPRIVATE + 14)
|
||||
#define SIOCPNDELRESOURCE (SIOCPROTOPRIVATE + 15)
|
||||
|
||||
/* Phonet protocol header */
|
||||
struct phonethdr {
|
||||
|
|
|
@ -52,6 +52,19 @@ static int pn_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
|||
answ = skb ? skb->len : 0;
|
||||
release_sock(sk);
|
||||
return put_user(answ, (int __user *)arg);
|
||||
|
||||
case SIOCPNADDRESOURCE:
|
||||
case SIOCPNDELRESOURCE: {
|
||||
u32 res;
|
||||
if (get_user(res, (u32 __user *)arg))
|
||||
return -EFAULT;
|
||||
if (res >= 256)
|
||||
return -EINVAL;
|
||||
if (cmd == SIOCPNADDRESOURCE)
|
||||
return pn_sock_bind_res(sk, res);
|
||||
else
|
||||
return pn_sock_unbind_res(sk, res);
|
||||
}
|
||||
}
|
||||
|
||||
return -ENOIOCTLCMD;
|
||||
|
|
|
@ -158,6 +158,7 @@ void pn_sock_unhash(struct sock *sk)
|
|||
spin_lock_bh(&pnsocks.lock);
|
||||
sk_del_node_init(sk);
|
||||
spin_unlock_bh(&pnsocks.lock);
|
||||
pn_sock_unbind_all_res(sk);
|
||||
}
|
||||
EXPORT_SYMBOL(pn_sock_unhash);
|
||||
|
||||
|
|
Loading…
Reference in New Issue