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 */
|
/* ioctls */
|
||||||
#define SIOCPNGETOBJECT (SIOCPROTOPRIVATE + 0)
|
#define SIOCPNGETOBJECT (SIOCPROTOPRIVATE + 0)
|
||||||
|
#define SIOCPNADDRESOURCE (SIOCPROTOPRIVATE + 14)
|
||||||
|
#define SIOCPNDELRESOURCE (SIOCPROTOPRIVATE + 15)
|
||||||
|
|
||||||
/* Phonet protocol header */
|
/* Phonet protocol header */
|
||||||
struct phonethdr {
|
struct phonethdr {
|
||||||
|
|
|
@ -52,6 +52,19 @@ static int pn_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
||||||
answ = skb ? skb->len : 0;
|
answ = skb ? skb->len : 0;
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
return put_user(answ, (int __user *)arg);
|
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;
|
return -ENOIOCTLCMD;
|
||||||
|
|
|
@ -158,6 +158,7 @@ void pn_sock_unhash(struct sock *sk)
|
||||||
spin_lock_bh(&pnsocks.lock);
|
spin_lock_bh(&pnsocks.lock);
|
||||||
sk_del_node_init(sk);
|
sk_del_node_init(sk);
|
||||||
spin_unlock_bh(&pnsocks.lock);
|
spin_unlock_bh(&pnsocks.lock);
|
||||||
|
pn_sock_unbind_all_res(sk);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pn_sock_unhash);
|
EXPORT_SYMBOL(pn_sock_unhash);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue