[net-next 1/1] tipc: sockopt(TIPC_SO_RCVBUF) for setting receive buffer
From: Jon Maloy <hidden>
Date: 2018-02-27 19:47:09
From: Hoang Le <redacted> We introduce a set/getsockopt for setting socket receive buffer per individual socket. This has turned out to sometimes be necessary for anycast and multicast receivers when used without flow control. Signed-off-by: Hoang Le <redacted> Signed-off-by: Jon Maloy <redacted> --- include/uapi/linux/tipc.h | 1 + net/tipc/socket.c | 8 ++++++++ 2 files changed, 9 insertions(+)
diff --git a/include/uapi/linux/tipc.h b/include/uapi/linux/tipc.h
index 14bacc7..8ce4a69 100644
--- a/include/uapi/linux/tipc.h
+++ b/include/uapi/linux/tipc.h@@ -233,6 +233,7 @@ struct sockaddr_tipc { #define TIPC_MCAST_REPLICAST 134 /* Default: TIPC selects. No arg */ #define TIPC_GROUP_JOIN 135 /* Takes struct tipc_group_req* */ #define TIPC_GROUP_LEAVE 136 /* No argument */ +#define TIPC_SO_RCVBUF 137 /* Range tipc_rmem_min:tipc_rmem_max */ /* * Flag values
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 8b04e60..cfd519b 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c@@ -2829,6 +2829,7 @@ static int tipc_setsockopt(struct socket *sock, int lvl, int opt, case TIPC_SRC_DROPPABLE: case TIPC_DEST_DROPPABLE: case TIPC_CONN_TIMEOUT: + case TIPC_SO_RCVBUF: if (ol < sizeof(value)) return -EINVAL; if (get_user(value, (u32 __user *)ov))
@@ -2877,6 +2878,10 @@ static int tipc_setsockopt(struct socket *sock, int lvl, int opt, case TIPC_GROUP_LEAVE: res = tipc_sk_leave(tsk); break; + case TIPC_SO_RCVBUF: + value = max_t(int, value, sysctl_tipc_rmem[0]); + sk->sk_rcvbuf = min_t(int, value, sysctl_tipc_rmem[2]); + break; default: res = -EINVAL; }
@@ -2945,6 +2950,9 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt, tipc_group_self(tsk->group, &seq, &scope); value = seq.type; break; + case TIPC_SO_RCVBUF: + value = sk->sk_rcvbuf; + break; default: res = -EINVAL; }
--
2.1.4
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot