aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/socket.c
diff options
context:
space:
mode:
authorJon Maloy <jon.maloy@ericsson.com>2018-04-25 13:29:36 -0400
committerDavid S. Miller <davem@davemloft.net>2018-04-27 11:05:41 -0400
commit3e5cf362c34b14c8d01d19d4b821fb35e1779862 (patch)
treed798193490f920228a538594fb7422d264d888fa /net/tipc/socket.c
parent79741a38b4a2538a68342c45b813ecb9dd648ee8 (diff)
tipc: introduce ioctl for fetching node identity
After the introduction of a 128-bit node identity it may be difficult for a user to correlate between this identity and the generated node hash address. We now try to make this easier by introducing a new ioctl() call for fetching a node identity by using the hash value as key. This will be particularly useful when we extend some of the commands in the 'tipc' tool, but we also expect regular user applications to need this feature. Acked-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r--net/tipc/socket.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 252a52ae0893..c4992002fd68 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -2973,7 +2973,8 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt,
2973 2973
2974static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 2974static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2975{ 2975{
2976 struct sock *sk = sock->sk; 2976 struct net *net = sock_net(sock->sk);
2977 struct tipc_sioc_nodeid_req nr = {0};
2977 struct tipc_sioc_ln_req lnr; 2978 struct tipc_sioc_ln_req lnr;
2978 void __user *argp = (void __user *)arg; 2979 void __user *argp = (void __user *)arg;
2979 2980
@@ -2981,7 +2982,7 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2981 case SIOCGETLINKNAME: 2982 case SIOCGETLINKNAME:
2982 if (copy_from_user(&lnr, argp, sizeof(lnr))) 2983 if (copy_from_user(&lnr, argp, sizeof(lnr)))
2983 return -EFAULT; 2984 return -EFAULT;
2984 if (!tipc_node_get_linkname(sock_net(sk), 2985 if (!tipc_node_get_linkname(net,
2985 lnr.bearer_id & 0xffff, lnr.peer, 2986 lnr.bearer_id & 0xffff, lnr.peer,
2986 lnr.linkname, TIPC_MAX_LINK_NAME)) { 2987 lnr.linkname, TIPC_MAX_LINK_NAME)) {
2987 if (copy_to_user(argp, &lnr, sizeof(lnr))) 2988 if (copy_to_user(argp, &lnr, sizeof(lnr)))
@@ -2989,6 +2990,14 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2989 return 0; 2990 return 0;
2990 } 2991 }
2991 return -EADDRNOTAVAIL; 2992 return -EADDRNOTAVAIL;
2993 case SIOCGETNODEID:
2994 if (copy_from_user(&nr, argp, sizeof(nr)))
2995 return -EFAULT;
2996 if (!tipc_node_get_id(net, nr.peer, nr.node_id))
2997 return -EADDRNOTAVAIL;
2998 if (copy_to_user(argp, &nr, sizeof(nr)))
2999 return -EFAULT;
3000 return 0;
2992 default: 3001 default:
2993 return -ENOIOCTLCMD; 3002 return -ENOIOCTLCMD;
2994 } 3003 }