aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/socket.c
diff options
context:
space:
mode:
authorErik Hugne <erik.hugne@ericsson.com>2014-04-24 10:26:47 -0400
committerDavid S. Miller <davem@davemloft.net>2014-04-26 12:13:24 -0400
commit78acb1f9b898e85fa2c1e28e700b54b66b288e8d (patch)
tree0520313d3d6afcc42d7aaf27fbe699e8bc71e2d5 /net/tipc/socket.c
parenta89778d8baf19cd7e728d81121a294a06cedaad1 (diff)
tipc: add ioctl to fetch link names
We add a new ioctl for AF_TIPC that can be used to fetch the logical name for a link to a remote node on a given bearer. This should be used in combination with link state subscriptions. The logical name size limit definitions are moved to tipc.h, as they are now also needed by the new ioctl. Signed-off-by: Erik Hugne <erik.hugne@ericsson.com> Reviewed-by: Ying Xue <ying.xue@windriver.com> Reviewed-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.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 3c0256962f7d..3f9912f87d0d 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -36,6 +36,7 @@
36 36
37#include "core.h" 37#include "core.h"
38#include "port.h" 38#include "port.h"
39#include "node.h"
39 40
40#include <linux/export.h> 41#include <linux/export.h>
41 42
@@ -1905,6 +1906,28 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt,
1905 return put_user(sizeof(value), ol); 1906 return put_user(sizeof(value), ol);
1906} 1907}
1907 1908
1909int tipc_ioctl(struct socket *sk, unsigned int cmd, unsigned long arg)
1910{
1911 struct tipc_sioc_ln_req lnr;
1912 void __user *argp = (void __user *)arg;
1913
1914 switch (cmd) {
1915 case SIOCGETLINKNAME:
1916 if (copy_from_user(&lnr, argp, sizeof(lnr)))
1917 return -EFAULT;
1918 if (!tipc_node_get_linkname(lnr.bearer_id, lnr.peer,
1919 lnr.linkname, TIPC_MAX_LINK_NAME)) {
1920 if (copy_to_user(argp, &lnr, sizeof(lnr)))
1921 return -EFAULT;
1922 return 0;
1923 }
1924 return -EADDRNOTAVAIL;
1925 break;
1926 default:
1927 return -ENOIOCTLCMD;
1928 }
1929}
1930
1908/* Protocol switches for the various types of TIPC sockets */ 1931/* Protocol switches for the various types of TIPC sockets */
1909 1932
1910static const struct proto_ops msg_ops = { 1933static const struct proto_ops msg_ops = {
@@ -1917,7 +1940,7 @@ static const struct proto_ops msg_ops = {
1917 .accept = sock_no_accept, 1940 .accept = sock_no_accept,
1918 .getname = tipc_getname, 1941 .getname = tipc_getname,
1919 .poll = tipc_poll, 1942 .poll = tipc_poll,
1920 .ioctl = sock_no_ioctl, 1943 .ioctl = tipc_ioctl,
1921 .listen = sock_no_listen, 1944 .listen = sock_no_listen,
1922 .shutdown = tipc_shutdown, 1945 .shutdown = tipc_shutdown,
1923 .setsockopt = tipc_setsockopt, 1946 .setsockopt = tipc_setsockopt,
@@ -1938,7 +1961,7 @@ static const struct proto_ops packet_ops = {
1938 .accept = tipc_accept, 1961 .accept = tipc_accept,
1939 .getname = tipc_getname, 1962 .getname = tipc_getname,
1940 .poll = tipc_poll, 1963 .poll = tipc_poll,
1941 .ioctl = sock_no_ioctl, 1964 .ioctl = tipc_ioctl,
1942 .listen = tipc_listen, 1965 .listen = tipc_listen,
1943 .shutdown = tipc_shutdown, 1966 .shutdown = tipc_shutdown,
1944 .setsockopt = tipc_setsockopt, 1967 .setsockopt = tipc_setsockopt,
@@ -1959,7 +1982,7 @@ static const struct proto_ops stream_ops = {
1959 .accept = tipc_accept, 1982 .accept = tipc_accept,
1960 .getname = tipc_getname, 1983 .getname = tipc_getname,
1961 .poll = tipc_poll, 1984 .poll = tipc_poll,
1962 .ioctl = sock_no_ioctl, 1985 .ioctl = tipc_ioctl,
1963 .listen = tipc_listen, 1986 .listen = tipc_listen,
1964 .shutdown = tipc_shutdown, 1987 .shutdown = tipc_shutdown,
1965 .setsockopt = tipc_setsockopt, 1988 .setsockopt = tipc_setsockopt,