diff options
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r-- | net/tipc/socket.c | 29 |
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 | ||
1909 | int 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 | ||
1910 | static const struct proto_ops msg_ops = { | 1933 | static 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, |