Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[linux-2.6-microblaze.git] / net / tipc / socket.c
index 3bb4504..14a5d05 100644 (file)
@@ -2970,7 +2970,8 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt,
 
 static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
-       struct sock *sk = sock->sk;
+       struct net *net = sock_net(sock->sk);
+       struct tipc_sioc_nodeid_req nr = {0};
        struct tipc_sioc_ln_req lnr;
        void __user *argp = (void __user *)arg;
 
@@ -2978,7 +2979,7 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
        case SIOCGETLINKNAME:
                if (copy_from_user(&lnr, argp, sizeof(lnr)))
                        return -EFAULT;
-               if (!tipc_node_get_linkname(sock_net(sk),
+               if (!tipc_node_get_linkname(net,
                                            lnr.bearer_id & 0xffff, lnr.peer,
                                            lnr.linkname, TIPC_MAX_LINK_NAME)) {
                        if (copy_to_user(argp, &lnr, sizeof(lnr)))
@@ -2986,6 +2987,14 @@ static int tipc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                        return 0;
                }
                return -EADDRNOTAVAIL;
+       case SIOCGETNODEID:
+               if (copy_from_user(&nr, argp, sizeof(nr)))
+                       return -EFAULT;
+               if (!tipc_node_get_id(net, nr.peer, nr.node_id))
+                       return -EADDRNOTAVAIL;
+               if (copy_to_user(argp, &nr, sizeof(nr)))
+                       return -EFAULT;
+               return 0;
        default:
                return -ENOIOCTLCMD;
        }