Skip to content

Commit 2c704cd

Browse files
sowminivMukesh Kacker
authored andcommitted
Add getsockopt support for SO_RDS_TRANSPORT
The currently attached transport for a PF_RDS socket may be obtained from user space by invoking getsockopt(2) using the SO_RDS_TRANSPORT option at the SOL_RDS level. The integer optval returned will be one of the RDS_TRANS_* constants defined in linux/rds.h. Orabug: 21061146 Signed-off-by: Sowmini Varadhan <[email protected]> Signed-off-by: David S. Miller <[email protected]> Signed-off-by: Mukesh Kacker <[email protected]>
1 parent de45f97 commit 2c704cd

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

net/rds/af_rds.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ static int rds_getsockopt(struct socket *sock, int level, int optname,
402402
{
403403
struct rds_sock *rs = rds_sk_to_rs(sock->sk);
404404
int ret = -ENOPROTOOPT, len;
405+
int trans;
405406

406407
if (level != SOL_RDS)
407408
goto out;
@@ -427,6 +428,19 @@ static int rds_getsockopt(struct socket *sock, int level, int optname,
427428
else
428429
ret = 0;
429430
break;
431+
case SO_RDS_TRANSPORT:
432+
if (len < sizeof(int)) {
433+
ret = -EINVAL;
434+
break;
435+
}
436+
trans = (rs->rs_transport ? rs->rs_transport->t_type :
437+
RDS_TRANS_NONE); /* unbound */
438+
if (put_user(trans, (int __user *)optval) ||
439+
put_user(sizeof(int), optlen))
440+
ret = -EFAULT;
441+
else
442+
ret = 0;
443+
break;
430444
default:
431445
break;
432446
}

0 commit comments

Comments
 (0)